2010-03-31 20 views
8

Trong câu hỏi trước < How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list?> có một ví dụ về cách tạo đường dẫn đầy đủ tới khóa đăng ký bằng cách sử dụng VS 2008. Mọi thứ trong câu trả lời trước hoạt động chính xác trừ đường dẫn đầy đủ mà tôi đang thiết lập (bằng cách sử dụng trình chỉnh sửa đăng ký trong VS) cho mscoree.dll không hoạt động (có nghĩa là dường như không làm gì cả).Sự cố đăng ký máy chủ COM được viết cho Excel được đăng ký trên máy khách (không thể đặt đường dẫn đầy đủ thành mscoree.dll)

Đường dẫn đăng ký đầy đủ là:

HKEY_CLASSES_ROOT \ CLSID \ {my_GUID} \ InprocServer32 \ (mặc định)

và giá trị Tôi đang thiết là:

[SystemFolder] mscoree.dll

Tôi có thể đặt bất kỳ thứ gì (bao gồm mã hóa đường dẫn đầy đủ) nhưng cài đặt dường như không quan trọng và sổ đăng ký luôn chứa mscoree.dll mà không có bất kỳ đường dẫn nào.

Tôi đã thử thêm giá trị khác vào đường dẫn đăng ký qua VS và hoạt động chính xác bao gồm có đường dẫn đầy đủ như được chỉ định bởi [SystemFolder]. Lý do tôi cần đường dẫn đầy đủ (như được giải thích trong câu hỏi trước) là không có đường dẫn, Excel sẽ tạo ra lỗi khi máy chủ tự động được chọn vì nó không thể tìm thấy mscoree.dll (thú vị mặc dù tôi nhận được lỗi đăng ký hoạt động OK).

Tôi đang thực hiện cài đặt qua dự án thiết lập mà hoạt động tốt.

Tôi đang cài đặt trên hệ thống VISTA * 64 nhưng đã gặp lỗi tương tự trên hệ điều hành khác.

Có ai biết tôi đang làm gì sai không?

Trả lời

1

Tôi đã không thử nó nhưng tôi đoán nó liên quan đến khi VS.NET đặt trong khóa registry của bạn "[SystemFolder] mscoree.dll". Nó đã được làm việc trong bài gốc. Nó có thể là do VS.NET đã chạy "regasm/regfile" đầu tiên và sau đó ghi đè khóa đó với "[SystemFolder] mscoree.dll"

Trong trường hợp của bạn, nó không hoạt động vì VS.NET đặt vào khóa registry "[SystemFolder] mscoree.dll" vào bảng đăng ký MSI đầu tiên và sau đó giá trị của bạn đã bị ghi đè bởi các giá trị đầu ra từ "regasm/regfile".

Để loại trừ khả năng VS.NET ghi đè giá trị của bạn, tôi nghĩ bạn có thể đánh dấu tệp DLL của bạn vsdrpDoNotRegister. Sau đó, VS.NET sẽ không thực hiện bất kỳ phép thuật nào trên bảng đăng ký của bạn. Bây giờ, bạn là tất cả của riêng bạn để làm đăng ký addin một cách chính xác. Tuy nhiên, như bản gốc đã nói, tất cả VS.NET đã chỉ đơn giản gọi là "regasm/regfile". Tại sao bạn không làm điều đó cho mình. Một khi bạn nhận được tệp .reg từ "regasm/regfile your.dll", điều duy nhất bạn cần làm là nhập nó vào bảng đăng ký. Nhấp chuột phải vào "Registry on Target machine" và nhấp vào menu "Import ...". Đó là nó. Nó không phải là khó. Sau khi bạn nhập tệp reg, bạn sẽ thấy khóa sau

HKEY_CLASSES_ROOT\CLSID\{my_GUID}\InprocServer32\(default) 

Giá trị vẫn nên được đặt thành mscoree.dll. Bây giờ, bạn chỉ có thể thay đổi nó thành [SystemFolder] mscoree.dll.

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