2014-12-04 12 views
6

Tôi gặp sự cố liên quan đến đăng ký * .dll trong Windows 7 x64.Truy vấn REGSVR32. Mô-đun "xxxxx.dll" không tải được

Tôi đã thử đặt * .dll trong cả hai, C:/Windows/System32 và C:/Windows/SysWOW64 và cố gắng đăng ký bằng "regsvr32 xxxxx.dll" dưới dấu nhắc lệnh nâng lên. Tôi cũng đã cố gắng đăng ký nó từ một thư mục riêng biệt. Nó phản ứng với các lỗi sau:

The module "xxxxx.dll" failed to load. 
Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. 
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail. 

Các EventLog lưu ý:

Activation context generation failed for "C:\(path-to-dll) 
Dependent Assembly 
Microsoft.VC90.ATL,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found. 
Please use sxstrace.exe for detailed diagnosis 

N.B. Tôi đã cài đặt cả X86 và x64 Microsoft Visual C++ 2010 Redistributables.

Một điều thú vị nữa là tôi đã cố gắng đăng ký cùng * .dll trên máy tính xách tay x64 của Windows 7 và đã đăng ký như mong đợi. Tôi đoán điều này nghiêng về phía thực tế là một số loại phụ thuộc C++ là mất tích/ATL liên quan?

Nếu có ai có thể giúp chỉ cho tôi đúng hướng hoặc làm sáng tỏ thêm bất kỳ vấn đề nào; tôi sẽ biết ơn hơn.

Trân trọng.

+0

Bạn tìm lỗi ở đâu? Đó có phải là nhật ký ứng dụng của cửa sổ không? Tôi không thấy bất kỳ ở đó –

+0

Nhật ký hệ thống trong trình xem sự kiện Windows iirc @RennishJoseph –

Trả lời

10

Điều này gần như chắc chắn là do thiếu phụ thuộc. Sử dụng công cụ như Dependency Walker để tìm phụ thuộc bắt buộc của DLL. Hoặc, nếu DLL được cung cấp bởi bên thứ ba, hãy đọc tài liệu hướng dẫn của họ để xác định các phụ thuộc bắt buộc.

Lưu ý rằng Microsoft.VC90.ATL cho biết phiên bản 9 của MSVC là VS2008. Vì vậy, bạn sẽ cần phải cài đặt thời gian chạy MSVC 2008 để đáp ứng sự phụ thuộc đó. Dường như bạn đã cài đặt thời gian chạy MSVC 2010 do nhầm lẫn.

Cuối cùng, vui lòng không đặt tệp vào thư mục hệ thống. Nó thuộc về hệ thống và bạn không nên sửa đổi nó.

+0

Cảm ơn bạn đã giới thiệu Phụ thuộc Walker. Nó thực sự là một công cụ rất mạnh mẽ. Tôi đã không có ý định rời khỏi * .dll trong các thư mục hệ thống, nó chỉ là một cái gì đó đã được đề xuất như là một giải pháp trên các bài viết tương tự trên SO; Tôi đã được scepital để tin rằng bản thân mình. Bạn đã đúng, đó là một sai lầm thay cho tôi; vì lý do gì tôi cho rằng Version9 là VS2010 chứ không phải VS2008. Cài đặt các Redistributables VS2008 x86 giải quyết vấn đề của tôi. Cảm ơn bạn vì câu trả lời. –

+0

Thư mục hệ thống là một con gấu thú cưng của tôi. Do đó mini-rant nhỏ của tôi !! –

+0

Tôi không thể nói rằng tôi không đồng ý! Tôi đã nhìn thấy rất nhiều bài viết theo đó mọi người đề nghị bán phá giá ngẫu nhiên * .dll trong đó. Peeve vật nuôi lớn của tôi là tốt. –

3

Dependent Assembly Microsoft.VC90.ATL,processorArchitecture="x86"

Điều này cho biết mô-đun thời gian chạy Visual C++ bị thiếu (xem Visual C++ Libraries as Shared Side-by-Side Assemblies). Nó có sẵn như là cài đặt redistributable (this có lẽ là một trong những bạn cần; x86 biến thể), mà bạn cần phải cài đặt trước khi đăng ký DLL của bạn (mà lần lượt phụ thuộc vào thiếu thành phần).

+0

Xin chào Roman. Cảm ơn bạn đã phản hồi. Liên kết bạn cung cấp hữu ích hơn và tôi chắc chắn sẽ giữ liên kết đó trong tương lai. Chúc mừng! –

+0

Hãy xem câu trả lời được cập nhật, tôi đã thêm liên kết tải xuống sẽ hữu ích. –

0

Tôi cảm thấy nhẹ nhõm vì thông báo lỗi này. Trong đường dẫn nhị phân của tôi, tôi đã có một SPACE. Chỉ cần thay thế SPACE bằng UNDERSCORE(_). Nó làm việc cho tôi.

0

vì tôi cũng phải đối mặt với cùng một vấn đề trong khi đăng ký x.dll thông qua Regsvr32, có một trong những lý do có thể là x.dll có thể là dll chưa được phát hành. Để sử dụng chức năng xuất dll unmanged trong mã net dot, bạn phải sử dụng Dllimport.

1

Ngoài ra còn có một lý do khác khiến việc này không thành công. Tôi chỉ chạy vào chính bản thân mình. Tôi đã sử dụng các phương pháp API không hỗ trợ Windows 7, such as PathCchRemoveFileSpec mà tôi đã phải cập nhật lên cũ hơn, deprecated PathRemoveFileSpec. Tôi đã sử dụng Dependency Walker để xác minh đây là nguyên nhân. Phụ thuộc Walker nằm một chút. Nếu bạn nhìn vào ảnh chụp màn hình của tôi (bên dưới), phần màu đỏ cho thấy vấn đề thực tế - các phương thức mà nó không thể giải quyết trong các tệp DLL, vv - nhưng màu xanh cho thấy các tệp DLL thực sự không phải là vấn đề DLL tồn tại).Kể từ khi phụ thuộc Walker quá già, nó nằm một chút (lỗi thời của nó, nó nghĩ rằng một cái gì đó không có sẵn theo thời gian), nhưng thường, nó cũng nói sự thật ... bạn chỉ cần di chuyển xuống một chút từ đầu khung bên trái như tôi đã làm. Lưu ý về bản thân: hãy cuộn xuống lần sau. Dù sao, một khi tôi bỏ pathcch.h, mọi thứ đã hoạt động trên 7. Mã hóa vui vẻ.

enter image description here

Các vấn đề liên quan