2009-01-18 13 views
5

Tôi có một dll được đăng ký cho com interop, vì vậy theo HKLM \ Software \ Classes \ CLSID [my guid] \ InprocServer32 [phiên bản của tôi không] \ Codebase nó có đường dẫn của dll đã đăng ký. Tuy nhiên, tôi đã sắp xếp lại cấu trúc thư mục của mình để đường dẫn không còn đúng nữa. Có cách nào để hủy đăng ký dll mà không đưa nó trở lại, sau đó unregistering, sau đó loại bỏ các tập tin một lần nữa?Làm thế nào để hủy đăng ký hội đồng .net của tôi khi nó không còn ở cùng một địa điểm?

Và điều gì sẽ xảy ra nếu tôi không có dll đó nữa hoặc chỉ có một số có số phiên bản khác?

Trả lời

2

Số phiên bản khác nhau (thường) không quan trọng. Miễn là DLL mới hơn chứa tất cả GUID xuất hiện trong phiên bản cũ hơn, nó sẽ không được đăng ký đúng cách (sử dụng phiên bản mới với regasm, exe). Và tất nhiên, đăng ký lại hội đồng cho COM interop sẽ di chuyển đúng các khóa registry cần thiết.

1

Theo như tôi biết - tất cả những gì bạn cần là đăng ký DLL ở vị trí mới.
Bạn có thể sử dụng công cụ MS oleview.exe để xác minh các điểm đăng ký COM đến vị trí chính xác.

0

Sự cố mà chúng tôi gặp phải khi chỉ đăng ký dll mới là khi nó có phiên bản thấp hơn cho phiên bản trước đó. Bạn kết thúc với điều này trong registry:

HKCR\MyLib.MyClass\CLSID:(Default)=<my guid> 

and 

HKCR\CLSID\<my guid>:Assembly=<string containing version number> 

and 

HKCR\CLSID\<my guid>\InprocServer32\<version number>\ ... more details 

Tôi nghĩ rằng thời gian chạy sẽ cố gắng để tải lắp ráp được xác định trong HKCR\CLSID\<my guid>:Assembly, vì vậy bạn muốn cố gắng unregister rằng một nếu có thể. Đây không phải là câu trả lời về cách hủy đăng ký, nhưng nếu bạn không thể hủy đăng ký, tôi thấy hữu ích khi vào đó và xóa khóa cho số phiên bản bạn không còn sử dụng nữa, và có thể cập nhật thông tin này giá trị Assembly theo cách thủ công nếu bạn dám.