Как использовать 32-разрядный драйвер ODBC на 64-разрядном сервере Server 2008, если программа установки не создает стандартный DSN?

У меня возникла проблема с некоторым сторонним программным обеспечением, которое мы используем для отслеживания использования лицензий на программное обеспечение в наших компьютерных лабораториях. Недавно мы перенесли приложение на 64-разрядную версию Server 2008 после получения заверений от компании в ее совместимости и выполнения некоторых предварительных тестов, которые показали, что приложение работает в 64-разрядной среде. К сожалению, человек, проводивший тестирование, не тестировал функциональность пары приложений, которые у меня есть, которые полагаются на доступ к данным, чтобы выполнять как живую, так и пост-обработку данных для создания некоторых отчетов.

Оказывается, приложение не имеет 64-разрядного драйвера ODBC для доступа к своим внутренним данным и не может использовать 64-разрядный драйвер ODBC для SQL Server для экспорта своих данных на SQL-сервер. Он включает и устанавливает 32-разрядный драйвер ODBC, но устанавливает его как источник данных пользователя, а не как системный источник данных, а это означает, что моя служба Windows, запускающая живую коллекцию, не может ее найти. Я также не могу создать системный DSN, поскольку консоль администратора источников данных не может найти установленный драйвер.

У меня вопрос: как мне настроить источник данных для этого подключения, к которому я могу получить доступ из службы Windows C # /. NET, работающей под системной учетной записью?

Поскольку я нашел способ сделать это, я предоставлю свое решение в качестве ответа (в соответствии с FAQ о том, как ответьте на свой вопрос).

Аналогично: Какое программное обеспечение существует для соединения 64-битного приложения ODBC с 32-битным драйвером ODBC в Windows?


person tvanfosson    schedule 16.07.2009    source источник
comment
Вы догадались? Ницца. Единственное, что я могу добавить, это то, что (афайк) вы не можете получить доступ к 32-битному драйверу ODBC из 64-битной программы (или наоборот)   -  person Alex Black    schedule 16.07.2009
comment
Это 32-битное приложение, работающее на 64-битном компьютере. Если бы мне пришлось делать это снова и снова, я бы более скептически отнесся к утверждению, что их программное обеспечение работает на 64-битной платформе, когда на странице их платформ даже не указан Server 2008.   -  person tvanfosson    schedule 16.07.2009
comment
Когда вы размещаете этот материал под IIS 6, все становится ДЕЙСТВИТЕЛЬНО непросто (я думаю, что это может не быть проблемой в IIS 7?) - В IIS 6 вы не можете размещать как 32-битные, так и 64-битные программы, поэтому, если вы Если вы обслуживаете 64-битный ASP.NET, вам не обойтись без 32-битного ODBC. Фу!   -  person Dave Markle    schedule 16.07.2009
comment
Какие именно изменения вы внесли в реестр odbc? как у нас такая же проблема?   -  person    schedule 18.08.2011


Ответы (3)


Оказывается, вы можете создавать 32-битные ODBC-соединения, используя C:\Windows\SysWOW64\odbcad32.exe. Мое решение заключалось в создании 32-битного ODBC-соединения как системного DSN. Это все еще не позволяло мне подключиться к нему, поскольку .NET не могла его найти. После значительных и бесплодных поисков, чтобы найти, как заставить класс OdbcConnection искать DSN в нужном месте, я наткнулся на веб-сайт, на котором предлагалось изменить реестр для решения другой проблемы.

В итоге я создал соединение ODBC прямо под HKLM\Software\ODBC. Я просмотрел ключ SysWOW6432, чтобы найти параметры, которые были настроены с помощью 32-разрядной версии инструмента администрирования ODBC, и воссоздал их в стандартном месте. Однако я не добавил запись для драйвера, так как он также не был установлен стандартным установщиком для приложения.

После создания записи (вручную) я запустил службу Windows и все остался доволен.

person tvanfosson    schedule 16.07.2009
comment
Судя по всему, Microsoft никогда не переименовывала свою папку system32, поэтому system32 действительно имеет все 64-битные драйверы. А в папке SysWow64 есть все 32-битные драйверы. И запуск odbcad32.exe из папки SysWOW64 открывает 32-разрядную версию диалогового окна «Источники данных ODBC». По умолчанию проект .NET будет иметь целевую платформу x86. Я просто изменил его на x64, и мое соединение заработало, чтобы мой 64-битный драйвер NetezzaSQL работал с .NET. - person MacGyver; 16.07.2012
comment
Я предполагаю, что в Windows есть способ настроить конфигурацию по умолчанию для любой открываемой диалоговой панели управления и способ установки приложений. Или предоставляет для этого контекстное меню, вызываемое правой кнопкой мыши. Драйвер Netezza, который я использовал, - это тот же драйвер ODBC, что и у меня на компьютере с Windows XP. Я предполагаю, что это работает как для 32-битных, так и для 64-битных версий, но я не уверен. Можете ли вы сказать мне, где именно вы поместили свой ключ для 32-битного драйвера в реестре и какие строки вы использовали? Я поставлю вам +1, если вы поместите снимок экрана в свой ответ. - person MacGyver; 16.07.2012
comment
@MacGyver, к сожалению, я сменил работу с тех пор, как написал этот ответ, и у меня больше нет доступа к этой системе. - person tvanfosson; 16.07.2012
comment
ничего страшного. Размещение ссылки на мой вопрос и ответ - далее поясняется: stackoverflow.com/questions/11478252/ - person MacGyver; 16.07.2012
comment
Разве 32-разрядное приложение не ищет 32-разрядную версию драйвера ODBC автоматически, и наоборот, 64-разрядное приложение автоматически ищет 64-разрядную версию драйвера ODBC? - person JohnB; 15.08.2012

Откройте диспетчер IIS, выберите Пулы приложений, выберите пул приложений, который вы используете, нажмите «Дополнительные параметры» в правом меню. В разделе «Общие» установите для параметра «Разрешить 32-разрядные приложения» значение «Истина».

person Parag Vyas    schedule 30.01.2013
comment
К сожалению, приложение не работало в IIS. - person tvanfosson; 30.01.2013

Многие из этих ответов довольно старые, поэтому я подумал, что обновлю решение, которое, на мой взгляд, будет полезным.

Наша проблема была аналогична OP, мы обновили 32-битные машины XP до 64-битной Windows 7, и наше прикладное программное обеспечение, которое использует 32-битный драйвер ODBC, перестало иметь возможность писать в нашу базу данных.

Оказывается, есть два диспетчера источников данных ODBC, один для 32-битного и один для 64-битного. Поэтому мне пришлось запустить 32-битную версию, которая находится в C: \ Windows \ SysWOW64 \ odbcad32.exe. В диспетчере источников данных ODBC я смог перейти на вкладку Системный DSN и добавить мой драйвер в список с помощью кнопки «Добавить». (Вы можете проверить вкладку Драйверы, чтобы увидеть список драйверов, которые вы можете добавить, если вашего драйвера нет в этом списке, вам может потребоваться его установка).

Следующей проблемой было то, что программное обеспечение, которое мы запускали, было скомпилировано для использования «Any CPU». Это будет означать, что операционная система 64-битная, поэтому он будет смотреть на 64-битные источники данных ODBC. Поэтому мне пришлось принудительно скомпилировать программу как программу x86, которая затем сообщает ей, что нужно посмотреть 32-битные источники данных ODBC. Чтобы настроить программу на x86, в Visual Studio перейдите в свойства проекта и на вкладке сборки вверху есть раскрывающийся список платформы и выберите x86. Если у вас нет исходного кода и вы не можете скомпилировать программу как x86, вы можете щелкнуть правой кнопкой мыши файл .exe, перейти на вкладку совместимости и выбрать совместимость, которая вам подходит.

Как только я добавил драйверы и программа указала на нужные драйверы, все заработало, как раньше. Надеюсь, это поможет любому, кто работает со старым программным обеспечением.

person Baddack    schedule 17.11.2015