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

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

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

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

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

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

3 ответов


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

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

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


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


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

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

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

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

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