2009-07-16 25 views
25

Tôi chạy vào một vấn đề với một số phần mềm của bên thứ ba mà chúng tôi sử dụng để theo dõi việc sử dụng bản quyền phần mềm trong phòng thí nghiệm máy tính của chúng tôi. Gần đây chúng tôi đã di chuyển ứng dụng sang máy chủ 64-bit 2008 sau khi nhận được sự đảm bảo từ công ty rằng nó tương thích và chạy một số thử nghiệm sơ bộ cho thấy ứng dụng hoạt động trong môi trường 64 bit. Thật không may là người thực hiện thử nghiệm đã không kiểm tra chức năng của một vài ứng dụng mà tôi có dựa vào việc truy cập dữ liệu để thực hiện cả xử lý trực tiếp và sau trên dữ liệu để tạo ra một số báo cáo.Làm cách nào để sử dụng trình điều khiển ODBC 32 bit trên Máy chủ 64 bit 2008 khi trình cài đặt không tạo DSN chuẩn?

Chỉ ra rằng ứng dụng không có trình điều khiển ODBC 64 bit để truy cập dữ liệu nội bộ và không thể sử dụng trình điều khiển ODBC SQL Server 64 bit để xuất dữ liệu của nó sang máy chủ SQL. Nó bao gồm và cài đặt một trình điều khiển ODBC 32 bit, nhưng nó cài đặt nó như một Nguồn dữ liệu người dùng, không phải là Nguồn dữ liệu hệ thống, có nghĩa là dịch vụ Windows của tôi chạy bộ sưu tập trực tiếp không thể tìm thấy nó. Tôi cũng không thể tạo DSN hệ thống vì bảng điều khiển quản trị nguồn dữ liệu không thể tìm thấy trình điều khiển đã cài đặt.

Câu hỏi của tôi là làm thế nào để cấu hình một nguồn dữ liệu cho kết nối này mà tôi có thể truy cập từ một C# /. NET cửa sổ dịch vụ chạy dưới tài khoản hệ thống?

Vì tôi đã tìm ra cách để làm điều đó, tôi sẽ cung cấp giải pháp của tôi như một câu trả lời (phù hợp với số FAQ về cách trả lời câu hỏi của riêng bạn).

Tương tự như: What software exists for bridging a 64-bit ODBC app to a 32-bit ODBC driver on windows?

+0

Bạn đã tìm ra? tốt đẹp. Điều duy nhất tôi có thể thêm là (afaik) bạn không thể truy cập một trình điều khiển ODBC 32 bit từ một chương trình 64 bit (hoặc vica versa) –

+1

Đó là một ứng dụng 32 bit chạy trên một máy tính 64-bit. Nếu tôi có nó để làm tất cả hơn một lần nữa, tôi muốn được nhiều hoài nghi của tuyên bố rằng phần mềm của họ chạy trên 64-bit khi trang nền tảng của họ thậm chí không liệt kê Server 2008. – tvanfosson

+1

Những điều có được thực sự lông khi bạn đang lưu trữ công cụ này dưới IIS 6 (Tôi nghĩ rằng điều này có thể không phải là một vấn đề trong IIS 7?) - Theo IIS 6, bạn không thể lưu trữ cả 32 bit và 64 bit chương trình, vì vậy nếu bạn đang phục vụ lên 64-bit ASP.NET, bạn đang khá nhiều hosed nếu bạn cần 32 bit công cụ ODBC. Ugh! –

Trả lời

41

Nó chỉ ra rằng bạn có thể tạo các kết nối ODBC 32-bit sử dụng C:\Windows\SysWOW64\odbcad32.exe. Giải pháp của tôi là tạo ra kết nối ODBC 32 bit làm DSN hệ thống. Điều này vẫn không cho phép tôi kết nối với nó vì .NET không thể tìm kiếm nó. Sau khi tìm kiếm đáng kể và không có kết quả để tìm cách lấy lớp OdbcConnection để tìm DSN ở địa chỉ đúng, tôi tình cờ gặp một trang web đề xuất sửa đổi sổ đăng ký để giải quyết một vấn đề khác.

tôi đã kết thúc việc tạo ra các kết nối ODBC trực thuộc HKLM\Software\ODBC. Tôi nhìn vào khóa SysWOW6432 để tìm các tham số đã được thiết lập bằng cách sử dụng phiên bản 32 bit của công cụ quản trị ODBC và tạo lại nó ở vị trí tiêu chuẩn. Tuy nhiên, tôi không thêm một mục nhập cho trình điều khiển, vì trình cài đặt chuẩn không được cài đặt cho ứng dụng.

Sau khi tạo các mục nhập (bằng tay), tôi bị sa thải lên cửa sổ dịch vụ của tôi và tất cả mọi thứ đã được hạnh phúc.

+7

+1 để trả lời câu hỏi ngay cả khi bạn tìm thấy câu trả lời. – Aren

+9

+1 để trả lời câu hỏi của tôi hơn một năm trước khi tôi hỏi. –

+0

Rõ ràng, Microsoft không bao giờ đổi tên thư mục "system32" của họ, vì vậy system32 thực sự có tất cả các trình điều khiển 64 bit. Và thư mục SysWow64 có tất cả các trình điều khiển 32 bit. Và khởi động "odbcad32.exe" trong thư mục SysWOW64 sẽ mở ra phiên bản 32 bit của hộp thoại Nguồn dữ liệu ODBC. Theo mặc định, một dự án .NET sẽ có một "Target Platform" của x86. Tôi chỉ cần thay đổi nó để x64 và kết nối của tôi đã làm việc để có được trình điều khiển 64 bit NetezzaSQL của tôi làm việc cho NET. – MacGyver

3

Mở trình quản lý IIS, chọn Nhóm ứng dụng, chọn nhóm ứng dụng bạn đang sử dụng, nhấp vào Cài đặt nâng cao trong menu bên phải. Dưới mục General, thiết lập "Enable 32-Bit Applications" thành "True".

+3

Rất tiếc, ứng dụng không chạy trong IIS. – tvanfosson

2

Rất nhiều câu trả lời này khá cũ nên tôi nghĩ tôi sẽ cập nhật bằng giải pháp mà tôi cho là hữu ích.

Vấn đề của chúng tôi tương tự như OP, chúng tôi nâng cấp máy XP 32 bit lên cửa sổ 64 bit 7 và phần mềm ứng dụng sử dụng trình điều khiển ODBC 32 bit đã ngừng ghi vào cơ sở dữ liệu của chúng tôi.

Hóa ra, có hai trình quản lý nguồn dữ liệu ODBC, một cho 32 bit và một cho 64 bit. Vì vậy, tôi đã phải chạy phiên bản 32 bit được tìm thấy trong C: \ Windows \ SysWOW64 \ odbcad32.exe.Bên trong Trình quản lý nguồn dữ liệu ODBC, tôi đã có thể đi đến tab DSN hệ thống và Thêm trình điều khiển của tôi vào danh sách bằng nút Thêm. (Bạn có thể kiểm tra tab Trình điều khiển để xem danh sách các trình điều khiển bạn có thể thêm, nếu trình điều khiển của bạn không có trong danh sách này thì bạn có thể cần phải cài đặt nó).

Vấn đề tiếp theo là phần mềm mà chúng tôi chạy được biên dịch để sử dụng 'CPU bất kỳ'. Điều này sẽ thấy hệ điều hành là 64 bit, do đó, nó sẽ xem xét các nguồn dữ liệu ODBC 64 bit. Vì vậy, tôi đã buộc chương trình phải biên dịch như một chương trình x86, sau đó yêu cầu nó xem xét các nguồn dữ liệu ODBC 32 bit. Để đặt chương trình của bạn thành x86, trong Visual Studio, hãy chuyển đến thuộc tính dự án của bạn và bên dưới tab xây dựng ở trên cùng có danh sách thả xuống nền tảng và chọn x86. Nếu bạn không có mã nguồn và không thể biên dịch chương trình như x86, bạn có thể nhấp chuột phải vào chương trình .exe và chuyển đến tab tương thích và chọn khả năng tương thích phù hợp với bạn.

Khi tôi đã có các trình điều khiển được thêm vào và chương trình trỏ đến đúng trình điều khiển, mọi thứ hoạt động giống như nó sử dụng. Hy vọng rằng điều này sẽ giúp bất cứ ai làm việc với phần mềm cũ.