2009-07-16 15 views
25

Wystąpił problem z oprogramowaniem innej firmy, którego używamy do śledzenia użycia licencji na oprogramowanie w naszych laboratoriach komputerowych. Niedawno przenieśliśmy aplikację na 64-bitowy serwer 2008 po otrzymaniu od firmy zapewnienia, że ​​jest ona zgodna i przeprowadziliśmy wstępne testy, które wykazały, że aplikacja działa w środowisku 64-bitowym. Niestety osoba przeprowadzająca testy nie przetestowała funkcjonalności kilku aplikacji, które mam, które polegają na uzyskiwaniu dostępu do danych w celu przetwarzania zarówno na żywo, jak i po przetworzeniu danych, w celu wygenerowania niektórych raportów.Jak używać 32-bitowego sterownika ODBC na 64-bitowym serwerze 2008, gdy instalator nie tworzy standardowego DSN?

Okazuje się, że aplikacja nie ma 64-bitowego sterownika ODBC, aby uzyskać dostęp do swoich wewnętrznych danych i nie może użyć 64-bitowego sterownika ODBC programu SQL Server do eksportowania swoich danych do serwera SQL. Zawiera i instaluje 32-bitowy sterownik ODBC, ale instaluje go jako źródło danych użytkownika, a nie systemowe źródło danych, co oznacza, że ​​moja usługa Windows, która uruchamia kolekcję na żywo, nie może go znaleźć. Nie mogę też utworzyć systemu DSN, ponieważ konsola administracyjna źródła danych nie może znaleźć zainstalowanego sterownika.

Moje pytanie brzmi: jak skonfigurować źródło danych dla tego połączenia, do którego mogę uzyskać dostęp z usługi Windows C#/.NET działającej pod kontem systemowym?

Odkąd wymyśliłem sposób, aby to zrobić, dostarczę moje rozwiązanie jako odpowiedź (zgodnie z FAQ, w jaki sposób odpowiedzieć na własne pytanie).

podobne do: What software exists for bridging a 64-bit ODBC app to a 32-bit ODBC driver on windows?

+0

Rozgryzłeś to? miły. Jedyne co mogę dodać to to, że (afaik) nie można uzyskać dostępu do 32-bitowego sterownika ODBC z programu 64-bitowego (lub vica versa). –

+1

Jest to 32-bitowa aplikacja działająca na 64-bitowym komputerze. Gdybym miał to zrobić od nowa, byłbym bardziej sceptyczny co do twierdzenia, że ​​ich oprogramowanie działa na 64-bitach, gdy ich strona na platformie nawet nie pokazuje Serwera 2008. – tvanfosson

+1

Rzeczy stają się NAPRAWDĘ owłosione podczas hostowania tych rzeczy pod IIS 6 (myślę, że to może nie być problemem w IIS 7?) - W IIS 6 nie można hostować programów zarówno 32-bitowych, jak i 64-bitowych, więc jeśli obsługujesz 64-bitowy program ASP.NET, jesteś bardzo mocno podcięty, jeśli potrzebujesz 32-bitowych rzeczy ODBC. Ugh! –

Odpowiedz

41

Okazuje się, że można tworzyć 32-bitowe połączenia ODBC przy użyciu C:\Windows\SysWOW64\odbcad32.exe. Moim rozwiązaniem było utworzenie 32-bitowego połączenia ODBC jako systemu DSN. To nadal nie pozwoliło mi się z nim połączyć, ponieważ .NET nie mógł go wyszukać. Po znaczących i bezowocnych poszukiwaniach, jak znaleźć klasę OdbcConnection, aby wyszukać DSN w odpowiednim miejscu, natknąłem się na stronę internetową, która sugerowała modyfikację rejestru w celu rozwiązania innego problemu.

Skończyło się na stworzeniu połączenia ODBC bezpośrednio pod numerem HKLM\Software\ODBC. Sprawdziłem klucz SysWOW6432, aby znaleźć parametry, które zostały skonfigurowane za pomocą 32-bitowej wersji narzędzia administracyjnego ODBC i odtworzyłem je w standardowej lokalizacji. Nie dodałem jednak wpisu dla sterownika, ponieważ nie został on zainstalowany przez standardowy instalator aplikacji.

Po utworzeniu wpisu (ręcznie) uruchomiłem usługę Windows i wszystko było dobrze.

+7

+1 za udzielenie odpowiedzi na pytanie, mimo że znalazłeś odpowiedź. – Aren

+9

+1 za udzielenie odpowiedzi na moje pytanie przez rok, zanim o to poprosiłem. –

+0

Najwyraźniej Microsoft nigdy nie zmienił nazwy folderów "system32", więc system32 ma naprawdę wszystkie 64-bitowe sterowniki. W folderze SysWow64 znajdują się wszystkie 32-bitowe sterowniki. Uruchomienie pliku "odbcad32.exe" w folderze SysWOW64 otwiera 32-bitową wersję okna Źródła danych ODBC. Domyślnie projekt .NET będzie miał "Platformę docelową" x86. Właśnie zmieniłem go na x64 i moje połączenie działało, aby mój 64-bitowy sterownik NetezzaSQL pracował dla .NET. – MacGyver

3

Otwórz Menedżera IIS, wybierz Pule aplikacji, wybierz pulę aplikacji, której używasz, kliknij Ustawienia zaawansowane w menu po prawej stronie. W sekcji Ogólne ustaw "Włącz aplikacje 32-bitowe" na "True".

+3

Niestety aplikacja nie działała w IIS. – tvanfosson

2

Wiele z tych odpowiedzi jest dość starych, więc pomyślałem, że zaktualizuję rozwiązanie, które moim zdaniem będzie pomocne.

Nasz problem był podobny do OP, zaktualizowaliśmy 32-bitowe komputery XP do 64-bitowego systemu Windows 7, a nasze oprogramowanie użytkowe, które używa 32-bitowego sterownika ODBC, przestało być w stanie pisać do naszej bazy danych.

Okazało się, że istnieją dwa menedżery źródeł danych ODBC, jeden dla 32 bitów i jeden dla 64 bitów. Musiałem więc uruchomić wersję 32-bitową, która znajduje się w C: \ Windows \ SysWOW64 \ odbcad32.exe.Wewnątrz ODBC Data Source Manager mogłem przejść do zakładki System DSN i Dodaj mój sterownik do listy za pomocą przycisku Dodaj. (Możesz sprawdzić kartę Sterowniki, aby zobaczyć listę sterowników, które możesz dodać, jeśli Twojego sterownika nie ma na tej liście, być może będziesz musiał go zainstalować).

Następnym numerem było oprogramowanie, które uruchomiliśmy zostało skompilowane do użycia "Any CPU". W ten sposób system operacyjny byłby 64-bitowy, więc wyglądałby na 64-bitowe źródła danych ODBC. Musiałem więc zmusić program do kompilacji jako program x86, który następnie nakazuje mu przejrzenie 32-bitowych źródeł danych ODBC. Aby ustawić program na x86, w Visual Studio przejdź do właściwości projektu i pod zakładką kompilacji u góry znajduje się rozwijana lista platform i wybierz x86. Jeśli nie masz kodu źródłowego i nie możesz skompilować programu jako x86, możesz kliknąć prawym przyciskiem myszy program .exe i przejść do zakładki kompatybilności i wybrać kompatybilność, która działa dla ciebie.

Po dodaniu sterowników i po wskazaniu odpowiednich sterowników, wszystko działało tak jak należy. Mam nadzieję, że pomoże to każdemu, kto pracuje ze starszym oprogramowaniem.