Я техник поддержки настольных компьютеров, в настоящее время работаю над крупномасштабным проектом миграции на нескольких сайтах. Я ищу способ переноса записей ODBC из Windows XP в Windows 7. Если кто-нибудь знает программу или что-то готовое, что уже делает это, перенаправьте меня, пожалуйста. Я уже смотрел, но ничего не нашел, поэтому пытаюсь построить свой собственный.
Я знаю достаточно основ программирования, чтобы читать работы других и копаться в том, что уже существует, но не более того. Я наткнулся на специальный командный файл, написанный на одном сайте, который (среди прочего) экспортирует информацию ODBC со старого компьютера и сохраняет ее на сервере (помеченный как 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-битных записей, и мне интересно, как это повлияет на код. Могу ли я скопировать одни и те же данные в обе части реестра в надежде уловить все?
Любая помощь будет оценена. Спасибо за уделенное время.
Да, вы на правильном пути. На самом деле есть два ключа реестра, которые вам будут интересны в зависимости от того, настроили ли вы настраиваемые порты TCP для соединений ODBC и т. Д.:
HKLM \ SOFTWARE \ Wow6432Node \ ODBC \ ODBC.INI \
HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSSQLServer \ Client \
HKLM - это место, где хранятся системные DSN. HKCU - это место, где хранятся пользовательские DSN для текущего пользователя.
Часть Wow6432Node будет присутствовать только в том случае, если вы просматриваете 32-битные записи ODBC в 64-битной системе. Если вы просматриваете 32-битные записи ODBC в 32-битной системе, вы не увидите папку Wow6432Node. Если вы просматриваете 64-битные записи ODBC в 64-битной системе, вы не увидите папку Wow6432Node. (Вы можете заменить «32-битный на 32-битный» и «64-битный на 64-битный» на слово «собственный».) Вы можете запустить 32-битный код на 64-битном компьютере, но он не считается «родным».
Если вы экспортируете записи ODBC с 32-битной платформы и импортируете их в 64-битную ОС, вам нужно будет поместить их в соответствующее место в папке Wow6432Node.
Чтобы увидеть это по-другому, перейдите на 64-битный компьютер с Windows 7. Запустите Windows \ System32 \ odbcad32.exe. Это родная (64-битная версия). Добавьте туда ODBC-соединение.
Теперь запустите Windows \ SysWOW64 \ odbcad32.exe на том же компьютере. Это 32-битная версия (WoW64 означает эмуляцию Win32 в 64-битной Windows). Вы заметите, что созданное вами ODBC-соединение отсутствует. Потому что вы больше не смотрите на собственные соединения ODBC. Вы смотрите на 32-битные.
Вот почему вы должны обращать внимание на архитектуру, из которой исходит ODBC-соединение, и на архитектуру, в которую вы его импортируете.
edit: Мое объяснение, вероятно, так же ясно, как грязь, но если вы хотите лучшего объяснения перенаправления файловой системы и перенаправления реестра для 32-битных процессов, работающих в 64-битной Windows, я настоятельно рекомендую Windows Internals, 6-е изд. Марк Руссинович и др. Часть I, Глава 3.
редактировать # 2: Нет, ты не может просто скопируйте ключи реестра в оба места и надейтесь все исправить. Система предпочтет родные, которые не будут работать, если они должны быть в 32-битном контексте.