Tôi đã tạo một bổ trợ Office trong VS 2008, C#, .NET 3.5 và VSTO. Nó được triển khai thông qua ClickOnce. Một hình thức cấu hình thời gian chạy thực hiện regsvr32 để đăng ký "fooapi.dll" đi kèm với dự án mà không thể được đăng ký trong thời gian instal do giới hạn ClickOnce. Có cách nào ưa thích hơn để kiểm tra xem "fooapi.dll" có được đăng ký trong thời gian chạy trong C# không?Làm cách nào để kiểm tra xem một dll COM được đăng ký trong C#
Trả lời
Thử phương pháp Type.GetTypeFromCLSID hoặc Type.GetTypeFromProgID để nhanh chóng kiểm tra sự tồn tại của giao diện COM.
Hoặc, chỉ cần khởi tạo đối tượng và bẫy ngoại lệ, ví dụ:
catch(COMException ex) {
if(ex.ErrorCode == -2147221164) {
// Retrieving the COM class factory for component with CLSID XXXX failed
}
}
UPDATE:
This overload dường như là người duy nhất mà thực sự trả null
nếu đối tượng COM không thể được khởi tạo.
Vẻ đẹp với 'Type.GetTypeFromCLSID' là nó luôn trả về System .__ ComObject cho dù CLSID có hợp lệ hay không – rpattabi
Tôi nghĩ cách đơn giản nhất là thử và tạo thành phần nằm trong fooapi.dll. Gói mã tạo trong khối try/catch và bắt ngoại lệ được tạo ra nếu DLL không được đăng ký đúng cách. Đây là cách chắc chắn nhất để kiểm tra đăng ký chính xác
Nếu bạn biết DLL GUID, bạn có thể kiểm tra sự tồn tại của khóa đăng ký trong HKCU\SOFTWARE\Classes
.
Kiểm tra sự hiện diện của HKEY_CLASSES_ROOT\CLSID\{your_CLSID}
và các giá trị thích hợp bên dưới. Có thể bạn chỉ có thể tìm kiếm các giá trị InprocServer32
và Codebase
nhưng bạn cũng có thể chọn tham gia để kiểm tra kỹ hơn.
Bạn cũng có thể chỉ cần tạo một phiên bản của thành phần. Tuy nhiên, nếu cả hai thành phần và khách hàng là C# và bạn sử dụng new
, CLR có thể tìm ra lắp ráp thích hợp và tải nó bằng cách thực hiện COM. (Có, nó có thể thông minh như thế đôi khi :-)). Bạn nên rõ ràng p/gọi đến CoCreateInstance
Nếu bạn có ProgID của các thành phần trong DLL, bạn có thể thử nhận Type:
System.Type.GetTypeFromProgID(string progID, bool throwOnError)
Nếu bạn nhận được System.Runtime.InteropServices.COMException
, nó có nghĩa là ProgID không được đăng ký.
- 1. Đăng ký một C#/VB.NET COM dll theo lập trình
- 2. đăng ký com dll trong wix
- 3. Làm cách nào để kiểm tra xem một sự kiện đã được đăng ký, trong .NET?
- 4. Đăng ký một NET COM DLL trong Wix Install
- 5. Làm thế nào để sử dụng Đăng ký miễn phí COM dll trong dot net
- 6. Làm cách nào để bạn đăng ký tệp DLL Win32 COM trong WiX 3?
- 7. Làm cách nào để tạo một .dll được tạo bằng IKVM com?
- 8. Làm cách nào để kiểm tra xem chuỗi có chứa ký tự trong C#?
- 9. Làm cách nào để kiểm tra xem máy quét đã được cắm chưa (C#, .NET TWAIN)
- 10. Cách kiểm tra đối tượng phụ thuộc COM trong C#
- 11. gỡ lỗi đăng ký miễn phí COM (C++)
- 12. Kiểm tra xem một Loại đã được đăng ký trong Unity
- 13. COM đăng ký Interop
- 14. Gỡ lỗi C# dll từ giải pháp C++ qua COM
- 15. Làm thế nào tôi có thể kiểm tra xem với ASP.NET 4 được đăng ký để chạy trong IIS 7.5?
- 16. Đăng ký một đối tượng COM được tạo với VS C# 2010
- 17. Lỗi không được đăng ký lớp để khởi tạo đối tượng C# qua COM từ VC++
- 18. Kiểm tra xem khóa đăng ký có tồn tại không?
- 19. Tiếp cận đối tượng COM đăng ký từ trăn qua một TLB đăng ký
- 20. cảnh báo MSB3391: <DLL> không chứa bất kỳ loại nào có thể được đăng ký cho COM Interop
- 21. Làm thế nào để bạn tạo một DLL COM trong Visual Studio 2008?
- 22. Cách đăng ký một assembly .NET như COM?
- 23. Làm cách nào để kiểm tra logic đăng ký khu vực trong MVC 3?
- 24. Làm cách nào để kiểm tra xem một thông báo nhật ký nhất định có được ghi lại trong trường hợp kiểm tra Django không?
- 25. Làm cách nào để kiểm tra xem ký tự thuần túy có được ký hoặc chưa ký?
- 26. Cách kiểm tra xem điểm nhập DLL tồn tại trong C# mà không cần gọi hàm
- 27. Đăng ký cho COM Interop
- 28. Làm cách nào để kiểm tra xem một số dương hay âm trong C#?
- 29. C# - làm thế nào để kiểm tra xem một quá trình được bắt đầu thành công
- 30. Làm cách nào để kiểm tra xem một biến được định nghĩa trong đường ray?
Erm, hy vọng của bạn về việc có thể đăng ký máy chủ COM đó là mỏng. Nó yêu cầu đặc quyền quản trị viên. Sử dụng COM miễn phí. –