Khi instantiating một đối tượng COM Interop:Instantiating một phần COM không thành công với "Lớp không đăng ký" khi "Run As Administrator"
var comObj = new ComComponentClass();
tôi nhận được COMException
:
Retrieving the COM class factory for component with CLSID
{C343ED84-A129-11D3-B799-0060B0F159EF} failed due to the following error:
80040154 Class not registered
(Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
tôi chỉ gặp lỗi này khi tôi khởi chạy ứng dụng của mình với Chạy với tư cách là Quản trị viên. Khi tôi chạy bình thường, lỗi không xảy ra.
Ghi chú:
- Ứng dụng này là ứng dụng 64-bit.
- Thành phần COM là máy chủ inproc trong dll 64 bit.
Bất kỳ ý tưởng nào về nơi tôi nên bắt đầu điều tra lý do sự khác biệt này xảy ra?
Những gì tôi đã cố gắng:
Tôi đã sử dụng ProcMon để xem những gì các khóa registry nó kiểm tra.
- Trong cả hai trường hợp, dll thích hợp được xác định bằng cách kiểm tra phím
HKCU\Software\Classes\CLSID\{C343ED84-A129-11d3-B799-0060B0F159EF}\InprocServer32
- Trong cả hai trường hợp, nó truy vấn chính
HKCR\CLSID\{C343ED84-A129-11D3-B799-0060B0F159EF}
và được trở lạiNAME NOT FOUND
. Mà tôi thấy lạ (kể từ khi tôi có thể thấy rằng chìa khóa sử dụngregedit.exe
. Nhưng vì điều này không khác nhau giữa hai kịch bản, nó không có vẻ quan trọng.
Tôi đoán là: anh ấy đã cài đặt nó từ MSI và chọn tùy chọn "chỉ cài đặt cho người dùng này". –
Trình cài đặt đã cài đặt nó, nhưng không có tùy chọn "chỉ cài đặt cho người dùng này". Vì vậy, các bước tiếp theo là tìm hiểu cách thức đăng ký. Rất cám ơn vì lời giải thích. –