Nhà cung cấp Microsoft.Jet.OLEDB.4.0 'chưa được đăng ký trên máy cục bộ


191

Tôi đã tạo một ứng dụng windows được phát triển trong .NET 3.5 trong máy chủ Windows 2008 32 bit. Khi triển khai ứng dụng trong máy chủ 64 bit, nó hiển thị lỗi "Nhà cung cấp Microsoft.Jet.OLEDB.4.0 'không được đăng ký trên máy cục bộ".

Vì vậy, như một giải pháp cho vấn đề này, tôi đã thay đổi thuộc tính xây dựng của dự án thành X86, để nó sẽ xây dựng ở chế độ 32 bit và xây dựng lại dự án trong máy 32 bit. Nhưng, cùng một dự án sử dụng các trình điều khiển DB khác (DB2, SQL, v.v.) để kết nối với các cơ sở dữ liệu khác. Vì vậy, khi tôi triển khai ứng dụng của mình một lần nữa trong HĐH 64 bit, nó sẽ ném ngoại lệ "Đã cố tải một cụm 64 bit trên nền tảng 32 bit".

Tôi đang sử dụng trình điều khiển Microsoft.Jet.OLEDB.4.0 để đọc và ghi vào Excel (.xls)

Câu trả lời:


238

Tôi tìm thấy một giải pháp cho vấn đề này. Vấn đề tôi mô tả trong câu hỏi của tôi xảy ra về cơ bản là do sự không tương thích của trình điều khiển Microsoft.Jet.OLEDB.4.0 trong HĐH 64 bit.

Vì vậy, nếu chúng tôi đang sử dụng trình điều khiển Microsoft.Jet.OLEDB.4.0 trong máy chủ 64 bit, chúng tôi phải buộc ứng dụng của mình xây dựng ở chế độ 32 bit (Đây là câu trả lời tôi tìm thấy khi thực hiện tìm kiếm mở rộng cho vấn đề đã biết này ) và điều đó làm cho một phần khác của mã của tôi bị phá vỡ.

May mắn thay, giờ đây Microsoft đã phát hành Trình điều khiển hệ thống Office tương thích 64 bit , có thể được sử dụng để thay thế cho trình điều khiển Microsoft.Jet.OLEDB.4.0 truyền thống. Nó hoạt động cả trong máy chủ 32 bit cũng như 64 bit. Tôi đã sử dụng nó để thao tác tệp Excel và nó hoạt động tốt với tôi trong cả hai môi trường.Nhưng trình điều khiển này là trong BETA .

Bạn có thể tải xuống trình điều khiển này từ Microsoft Access Database Engine 2010 Redistributable


6
Cũng đặc biệt chú ý đến các hướng dẫn trên liên kết đó :)
Đánh dấu

4
Tôi gặp vấn đề tương tự. Tôi đã thay đổi cấu hình ứng dụng thành x86, sau đó nó hoạt động!
skpaul

9
Ngoài ra, tôi đã phải thay đổi chuỗi kết nối từ việc sử dụng Microsoft.Jet.OLEDB.4.0 sang Microsoft.ACE.OLEDB.12.0
Spikolynn

16
Có, mặc dù Công cụ cơ sở dữ liệu truy cập tương thích 64 bit khả dụng, nhưng yêu cầu không có phiên bản 32 bit nào của sản phẩm MS Office được cài đặt trên hệ thống (ví dụ: MS Word 32 bit) là một vấn đề lớn. Cách giải quyết là bạn sử dụng phiên bản 32 bit của Access Database Engine 2010 và buộc ứng dụng .NET của bạn chạy ở chế độ 32 bit (ví dụ: bằng cách chọn nền tảng x86 trong Trình quản lý cấu hình). Và giải pháp thích hợp là thay thế MS Access bằng một giải pháp thay thế tốt hơn.
Massood Khaari

2
Câu hỏi không phải: tôi có thể phân phối Trình điều khiển này như "trong ứng dụng của tôi" hay mọi người dùng muốn sử dụng ứng dụng của tôi phải cài đặt thủ công?
philx_x

117

Nếu sự cố vẫn còn ở ASP.NET, tất cả những gì tôi phải làm là thay đổi cài đặt "Bật ứng dụng 32 bit" thành True, trong Cài đặt nâng cao cho nhóm ứng dụng.


Tôi đã sử dụng ODBC 64 bit và thay đổi này bắt đầu khiến tôi gặp lỗi cơ sở dữ liệu. Tôi đã sửa nó mặc dù. Trong trường hợp ai đó cũng gặp phải điều này, bạn sẽ phải cài đặt trình điều khiển ODBC 32 bit và sau đó tạo DSN của bạn trong đó.
Farhan Hafeez

2
Bây giờ hoàn toàn có thể làm điều này hoàn toàn bằng mã 64 bit. Cài đặt phân phối lại được liên kết trong câu trả lời của neo , sau đó sử dụng chuỗi Nhà cung cấp được đề xuất trong câu trả lời của Iqbal . Sau đó upvote cả hai câu trả lời. Đó là nó!
Roman Starkov

Điều này đã khắc phục sự cố cho tôi trên Windows Server 2008 R2 sau khi cài đặt Access DB Engine Redist 32 bit .
Chris Pickford

2
Nhược điểm là pool sẽ chạy ở chế độ 32 bit. Thay vào đó chúng tôi sẽ chuyển sang ACE để tránh điều này.
wtjones

làm việc cho tôi với Windows Forms là tốt. hoàn toàn không có mã ASP.NET
philx_x 11/2/2016

52

Tôi có cùng một vấn đề

Nhà cung cấp Microsoft.Jet.OLEDB.4.0 'chưa được đăng ký trên máy cục bộ

Tôi đã áp dụng câu trả lời của neo nhưng nó không hoạt động cho đến khi tôi thay đổi nhà cung cấp thành Nhà cung cấp dịch vụ = Microsoft.ACE.OLEDB.12.0;trong chuỗi kết nối.

Hy vọng điều này sẽ giúp nếu ai đó phải đối mặt với cùng một vấn đề.


4
Đây là nó! Đối với máy chủ 64 bit, hãy cài đặt phân phối lại được liên kết bởi neo (biến thể 64 bit, rõ ràng), sau đó thay đổi nhà cung cấp như được chỉ định trong câu trả lời này, sau đó nó sẽ hoạt động.
Roman Starkov

Bạn đúng là romkyns. Tôi đã nói tôi áp dụng giải pháp neo, sau đó thay đổi nhà cung cấp. Nhưng cảm ơn bình luận của bạn làm cho nó rõ ràng hơn. Cảm ơn rất nhiều romkyns
Iqbal

thay thế Microsoft.Jet.OLEDB.4.0 bằng Microsoft.ACE.OLEDB.12.0; trong app.config và mọi thứ đã hoạt động.
AVEbrahimi

1
Tôi thấy rằng điều này đã hoạt động, trong khi việc giới hạn ứng dụng xuống 32 bit không có gì khác biệt.
Ryan Lundy

Trong trường hợp của tôi: "Microsoft.ACE.OLEDB.12.0 chưa được đăng ký", :(
César León

29

Tôi biết đó là những câu hỏi khá cũ và nhiều người đã trả lời. nhưng tôi đang tóm tắt những điều cần hiểu:

Nếu phần mở rộng tệp là xls và HĐH là 32 bit thì chỉ bạn mới có thể sử dụng " Microsoft.Jet.OLEDB.4.0". Microsoft chưa phát hành phiên bản 64 bit của trình điều khiển này.

Nếu phần mở rộng tệp là xlsx hoặc HĐH là 64 bit thì bạn phải sử dụng " Microsoft.ACE.OLEDB.12.0". Ứng dụng được biên dịch ở chế độ 32/64 bit không ảnh hưởng đến việc lựa chọn trình điều khiển.

Luôn cài đặt trình điều khiển 64 bit Microsoft.ACE.OLEDB.12.0trên OS 64 bit. Nếu bạn đã cài đặt Office 32 bit thì bạn cần chạy trình điều khiển từ cmd với / đối số thụ động. Bản hack này chỉ hoạt động cho đến Office 2013, Microsoft đã dừng giải pháp này từ Office 2016 cho trình điều khiển Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

Tải xuống trình điều khiển Microsoft.ACE.OLEDB.12.0

private void ProcessFile(string path)
{
    string connString = string.Empty;

    if (Path.GetExtension(path).ToLower().Trim() == ".xls" && Environment.Is64BitOperatingSystem == false)
        connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
    else
        connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}

Nếu Ứng dụng được biên dịch bằng cờ AnyCPU, nó sẽ tìm trình điều khiển Access 64 bit trên HĐH 64 bit và Trình điều khiển truy cập 32 bit trên HĐH 32 bit.


1
Cảm ơn câu trả lời của bạn, tuy nhiên, tôi đang sử dụng VS2015 trên Windows 10 và sử dụng X64. Khi tôi thay đổi cấu hình dự án từ AnyCPU thành X86, vấn đề đã biến mất. Tôi không phải cài đặt thêm trình điều khiển.
NoChance

@NoChance Tôi nghĩ rằng bạn đã cài đặt Office 64 bit trên máy của mình và nó đã chứa trình điều khiển Microsoft.ACE.OLEDB.12.0.
Romil Kumar Jain

Thx cho trả lời của bạn, tôi chỉ có văn phòng 2007.
NoChance

19

Tôi có cùng một thông điệp, tôi có một trang web làm trên visual studio 2010, tôi đã đọc một tệp.xls trên trang đó, trong hình ảnh dự án của tôi không có vấn đề gì, khi tôi đặt nó lên IIS cục bộ của tôi ném cho tôi một 'Microsoft .Jet.OLEDB.4.0 'nhà cung cấp không được đăng ký trên máy cục bộ' , tôi đã khắc phục vấn đề đó tiếp theo sau các bước này,

1.-Mở IIS
2.-Thay đổi appPool trên Cài đặt nâng cao
3.-true để bật ứng dụng 32 bit.

và đó là tất cả

ps.I đã thay đổi Trình quản lý cấu hình thành X86 trên Nền tảng giải pháp hoạt động


Điều này buộc ứng dụng của bạn chạy ở chế độ 32 bit. Bạn cần tắt cài đặt này nếu bạn muốn có thể tránh được rào cản 4GB.
Brain2000

18

Nếu ứng dụng của bạn chạy trên localIIS, Bạn có thể giải quyết vấn đề này bằng cách bật các ứng dụng 32 bit trong Cài đặt nâng cao của AppPool

nhập mô tả hình ảnh ở đây


8

Tôi gặp vấn đề tương tự. Tôi đã thay đổi cấu hình ứng dụng x86, sau đó nó hoạt động!


Làm thế nào để thay đổi cấu hình này? Tôi đã tạo dự án loại trang web
SHEKHAR SHETE

7

Tôi vừa thay đổi Tài sản của dự án thành định dạng x64

Dự án ---> Thuộc tính ---> Xây dựng ---> Khung mục tiêu ---> X64


5

Chúng tôi đã gặp vấn đề này trong ứng dụng máy tính để bàn.

Môi trường phát triển: Windows 7 Ultimate - 64 bit .Net Framework 4.5 Nhà cung cấp = Microsoft.Jet.OLEDB.4.0

Nó đã được giải quyết bằng cách thay đổi mục tiêu Nền tảng thành X86 từ bất kỳ CPU nào. Thuộc tính dự án >> Xây dựng >> Mục tiêu nền tảng.

nhập mô tả hình ảnh ở đây


2

Tôi gặp vấn đề này với ứng dụng máy tính để bàn của mình (nhà cung cấp 'Microsoft.Jet.OLEDB.4.0' không được đăng ký trên máy cục bộ). Tôi không có tùy chọn để xây dựng dưới dạng ứng dụng 32 bit. Hy vọng điều này sẽ giúp những người khác trong tình huống tương tự.

Tôi đã làm như sau và vấn đề đã biến mất:

  1. Đã cài đặt phiên bản 64 bit của Microsoft Access Database Engine 2010 Redistributable , theo đề xuất của neo

  2. Đã thay đổi nhà cung cấp của tôi thành Microsoft.ACE.OLEDB.12.0


2

Mặc dù một giải pháp tối ưu hơn là chỉ cần biên dịch lại như đề xuất ở trên, điều đó đòi hỏi quyền truy cập vào mã nguồn. Trong trường hợp của tôi, tôi chỉ có .exe đã hoàn thành và phải sử dụng giải pháp này. Nó sử dụng CorFlags.exetừ SDK .Net để thay đổi các đặc tính tải của ứng dụng.

  1. Tải xuống SDK .Net Framework (Cá nhân tôi đã sử dụng 3.5 , nhưng phiên bản được sử dụng phải ở mức hoặc cao hơn .Net yêu cầu cho ứng dụng của bạn.
  2. Khi cài đặt, tất cả những gì bạn cần là CorLibs.exe, vì vậy chỉ cần kiểm tra Windows Development Tools .
  3. Sau khi cài đặt, tìm của bạn CorFlags.exe. Đối với bản cài đặt SDK .Net Framework 3.5 của tôi, nó đã ởC:\Program Files\Microsoft SDKs\Windows\v7.0\Bin .
  4. Mở một dấu nhắc lệnh và gõ path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Bạn đã hoàn tất! Điều này đặt các cờ bắt đầu cho chương trình của bạn để nó bắt đầu ở chế độ WOW64 32 bit và do đó có thể truy cập microsoft.jet.oledb.4.0.


1

Thay đổi trong nhóm cài đặt ứng dụng IIS Cài đặt nâng cao. Ứng dụng 32 bit có thể chạy được


1

Chỉ cần thay đổi thuộc tính dựa trên máy của bạn và tất cả đã được thực hiện :-)

Dự án ---> Thuộc tính ---> Xây dựng ---> Khung mục tiêu ---> X64

hoặc là

Dự án ---> Thuộc tính ---> Xây dựng ---> Khung mục tiêu ---> X86


1

Tôi đã thay đổi chuỗi kết nối của mình từ

var myConnectionString = string.Format ("Nhà cung cấp = Microsoft.Jet.OLEDB.4.0; Nguồn dữ liệu = {0}; Thông tin bảo mật liên tục = True; Jet OLEDB: Mật khẩu cơ sở dữ liệu =;", gisdbPath);

đến đây:

var myConnectionString = string.Format ("Nhà cung cấp = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny none; Data Source = {0}; user id = Admin; password =;", gisdbPath);

Nó hoạt động cho đến khi tôi không bao giờ yêu cầu Microsoft.Jet.OLEDB.4.0'mgistered.


0

Thực sự không có phiên bản 64 bit của Jet - và không có kế hoạch (rõ ràng) để sản xuất một chiếc.

Bạn có thể sử dụng trình điều khiển ACE 64 bit: http://www.microsoft.com/en-us/doad/details.aspx?displaylang=en&id=23734

  • nhưng tôi không biết nó sẽ hoạt động như thế nào nếu bạn cần quay lại Jet cho các ứng dụng 32 bit của mình.

Tuy nhiên, bạn có thể chuyển đổi dự án thành 32 bit trong phiên bản Express (Tôi chưa thử và không cài đặt 2008 trong bất kỳ hương vị nào nữa)

Có lẽ đã đến lúc phải loại bỏ cơ sở dữ liệu Truy cập hoàn toàn, thay vào đó hãy sử dụng máy chủ SQL?



0

Trong các phiên bản cũ hơn của IIS, bạn sẽ không tìm thấy Advance Settingsđể cho phép Enable 32-bit Applicationsbạn phải thực hiện các lệnh sau:

cscript% HỆ THỐNG% \ inetpub \ adminscripts \ adsutil.vbs SET W3SVC / AppPools / Enable32bitAppOnWin64 1

% HỆ THỐNG% \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -i

Tham khảo: Tại đây


0

Tôi đã nhận được ngoại lệ tương tự khi chạy "Nhập và xuất dữ liệu SQL Server 2014 (64-bit)" trên Windows 8.1.

Để khắc phục vấn đề này, tôi đã làm như sau

đã bắt đầu SQL Server 2014 Nhập và xuất dữ liệu (32 bit) thay vì 64 bit và nó đang hoạt động với tôi. Tôi đã không thay đổi bất kỳ cài đặt IIS và không cài đặt bất kỳ phần mềm bổ sung.


0

Tôi biết rằng tôi gặp vấn đề này nhiều lần khi tôi triển khai ứng dụng của mình trên máy chủ mới vì tôi đang sử dụng trình điều khiển này để kết nối với tệp Excel. Vì vậy, đây là những gì tôi đang làm gần đây.

Có Windows Server 2008 R2, tôi cài đặt trình điều khiển Access cho máy x64 bit và tôi thoát khỏi thông báo này, điều này khiến tôi rất vui khi gặp phải người khác.

Cái này ở đây hoạt động tuyệt vời trên máy dev của tôi nhưng trên máy chủ gây ra lỗi cho tôi ngay cả sau khi cài đặt trình điều khiển ODBC mới nhất, tôi nghĩ đây là vấn đề, nhưng đây là cách tôi giải quyết nó.

private const string OledbProviderString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\OlsonWindows.xls;Extended Properties=\"Excel 8.0;HDR=YES\"";

Tôi thay thế bằng nhà cung cấp mới như thế này dưới đây:

private const string OledbProviderString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xlsx;Extended Properties='Excel 12.0;HDR=YES;';";

Nhưng khi tôi làm điều này, có một điều bạn nên chú ý. Sử dụng phần mở rộng tệp .xlsx và phiên bản Excel là 12.0.

Sau khi tôi gặp phải thông báo lỗi này Lỗi: "Không thể tìm thấy ISAM có thể cài đặt" , tôi quyết định thay đổi những thứ giống như dưới đây:

private const string OledbProviderString =      @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xls;Extended Properties='Excel 8.0;HDR=YES;';"; 

và vâng, tôi đã làm xong điều khó chịu đó, nhưng ở đây tôi nhận được một thông báo khác Công cụ cơ sở dữ liệu Microsoft Access không thể mở hoặc ghi vào tệp 'time_zone'. Nó đã được mở độc quyền bởi một người dùng khác hoặc bạn cần có quyền để xem và ghi dữ liệu của nó.Điều đó cho tôi biết tôi không xa để giải quyết nó.

Có thể có một quá trình khác đã mở tệp trong khi đó và tất cả những gì tôi phải làm là khởi động lại và tất cả sẽ bắt đầu chạy trơn tru như mong đợi.


0

đi đến Bắt đầu-> Chạy và nhập cmd, điều này sẽ khởi động Dấu nhắc Lệnh (cũng có sẵn từ Bắt đầu-> Chương trình-> Phụ kiện-> Dấu nhắc Lệnh)

gõ cd .. và nhấn return type cd .. và nhấn return một lần nữa (tiếp tục làm điều này cho đến khi lời nhắc hiển thị:>)

bây giờ bạn cần truy cập vào một thư mục đặc biệt có thể là c: \ windows \ system32 hoặc có thể là c: \ winnt \ system32 hoặc có thể là c: \ windows \ sysWOW64 hãy thử nhập từng thư mục này, ví dụ: cd c: \ windows \ sysWOW64 (nếu nó nói Hệ thống không thể tìm thấy đường dẫn được chỉ định, hãy thử đường tiếp theo) cd c: \ windows \ system32 cd c: \ winnt \ system32 khi một trong những lỗi đó không gây ra lỗi, hãy dừng lại, bạn đã tìm thấy đúng thư mục.

bây giờ bạn cần đăng ký DLL OLE DB 4.0 bằng cách gõ các lệnh này và nhấn return sau mỗi lệnh

Bộ đệm Msjetoledb40.dll Bộ đệm Msjet40.dll


-2

Không có nhà cung cấp 64 bit cho Jet. Nếu bạn muốn hỗ trợ nhiều nguồn DB bao gồm Jet to Excel, bạn sẽ cần ít nhất một phần trong ứng dụng của mình để chạy trong quy trình 32 bit.

Lỗi bạn gặp phải khi biên dịch cho x86 là một chút lạ. Tôi không thể thấy làm thế nào bạn sẽ tham khảo các hội đồng 64 bit trong trường hợp này.


Anthony, làm thế nào tôi chỉ có thể làm cho một phần của dự án chạy ở chế độ 32 bit? Tất cả các kết nối DB này, bao gồm Excel, sẽ thuộc một dự án. Ngoài ra tôi đã gặp lỗi trong x86, khi tôi cố chạy nó trong hệ điều hành 64 bit. Tôi nghĩ điều này là do trình điều khiển DB2 được cài đặt trong HĐH 64 bit là phiên bản 64 bit và khi nó được giới thiệu lại từ ứng dụng, được cấu hình để chạy ở chế độ 32 bit, gây ra lỗi.
tân

Nếu việc chia dự án thành nhiều exes thì rắc rối hơn giá trị của nó, bạn chỉ còn lại biên dịch thành 32 bit. Về vấn đề DB2, bạn sẽ tìm kiếm một số chuyên gia về câu hỏi này có lẽ là một câu hỏi cụ thể khác của DB2. Thông thường, những thứ như SQL Server sẽ cài đặt cả nhà cung cấp 32 bit và 64 bit trên máy 64 bit.
AnthonyWJones

Cảm ơn Anthony cho ý kiến ​​của bạn. Từ việc thực hiện nhiều tìm kiếm về vấn đề này và từ ý kiến ​​của bạn, điều tôi hiểu là, tôi phải tạo ra một phần của dự án xử lý bảng excel như một dự án riêng biệt và làm cho nó biên dịch thành phiên bản 32 bit.
tân

3
Để mọi người biết, A2010 sẽ có Jet 64 bit.
David-W-Fenton

Cảm ơn David, 2010 có trình điều khiển 64 bit
neo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.