![通过批处理文件迁移 ODBC 信息](https://linux22.com/image/796999/%E9%80%9A%E8%BF%87%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E8%BF%81%E7%A7%BB%20ODBC%20%E4%BF%A1%E6%81%AF.png)
我是一名桌面支持技术人员,目前正在从事一个跨多个站点的大规模迁移项目。我正在寻找一种将 ODBC 条目从 Windows XP 转移到 Windows 7 的方法。如果有人知道已经可以执行此操作的程序或任何预构建程序,请重定向我。我已经查找过了,但什么也没找到,所以我正在尝试构建自己的程序。
我掌握了足够的基本编程知识,可以阅读其他人的作品,并摆弄一些已经存在的东西,但除此之外就没什么了。我曾遇到过一个网站上编写的自定义批处理文件,它(除其他功能外)从旧计算机导出 ODBC 信息并将其存储在服务器上(在文件开头通过 net use 标记为 y:),然后将其从服务器传输到新计算机。预先存在的代码用于 Windows XP 到 XP 的迁移。以下是相关代码:
echo Exporting ODBC Information
start /wait regedit.exe /e "y:\%username%\odbc.reg" HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
(以及之后)
echo Importing ODBC
start /wait regedit /s "y:\%username%\odbc.reg"
我们现在正在从 Windows XP 迁移到 7,批处理文件的这一部分似乎仍然适用于这个使用 Oracle 8i 和 10g 的特定站点。我希望在多个站点上使用此代码的精简版本,我想知道相同的代码行是否仍适用于 Oracle 以外的任何系统。
此外,我对这个问题的研究表明,64 位操作系统中 32/64 位条目的位置不同,我想知道这会对代码产生什么影响。我可以将相同的数据复制到注册表的两个部分,以期捕获所有内容吗?
任何帮助都将不胜感激。感谢您的时间。
答案1
是的,您走在正确的轨道上。实际上,您会对两个注册表项感兴趣,具体取决于您是否为 ODBC 连接设置了自定义 TCP 端口等:
HKLM\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\
HKLM\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\
HKLM 是存储系统 DSN 的地方。HKCU 是存储当前用户的用户 DSN 的地方。
仅当您在 64 位系统上查看 32 位 ODBC 条目时,Wow6432Node 部分才会出现。如果您在 32 位系统上查看 32 位 ODBC 条目,则不会看到 Wow6432Node 文件夹。如果您在 64 位系统上查看 64 位 ODBC 条目,则不会看到 Wow6432Node 文件夹。(您可以将“32 位上的 32 位”和“64 位上的 64 位”替换为“本机”。)您可以在 64 位计算机上运行 32 位代码,但它不被视为“本机”。
如果您从 32 位平台导出 ODBC 条目并将其导入 64 位操作系统,则需要将它们放在 Wow6432Node 文件夹下的适当位置。
要以另一种方式查看,请使用 64 位 Windows 7 计算机。运行 Windows\System32\odbcad32.exe。这是本机(64 位版本)。在其中添加 ODBC 连接。
现在在同一台机器上运行 Windows\SysWOW64\odbcad32.exe。这是 32 位版本(WoW64 代表 64 位 Windows 上的 Win32 仿真)。您会注意到您创建的 ODBC 连接不存在。因为您不再查看本机 ODBC 连接。您正在查看 32 位连接。
这就是为什么您必须注意 ODBC 连接的来源体系结构以及您要将其导入到的体系结构。
编辑:我的解释可能和泥巴一样清楚,但如果你想要一个更好的关于在 64 位 Windows 上运行的 32 位进程的文件系统重定向和注册表重定向的解释,我强烈建议Windows Internals,第 6 版作者:Mark Russinovich 等人。第一部分,第 3 章。
编辑 #2:不,你不能只需将注册表项复制到两个位置并希望捕获所有内容。系统将优先使用本机注册表项,如果它们需要位于 32 位环境中,则无法工作。