我想安裝註冊免費的COM,但有一個小問題,我另一個COM對象可能是客戶端。註冊免費的COM和DLL清單
APP.EXE -----> COM服務器/客戶端DLL(註冊與否)--------> COM服務器DLL(未註冊)
我的問題是,是否有可能爲第二個DLL(COM服務器/客戶端DLL)創建一個清單?我沒有可執行文件的控制權,但是如果我這樣做了,如果我爲可執行文件創建客戶端清單併爲COM服務器dll創建服務器清單,則這將起作用。
這是中間dll的清單文件。我試圖嵌入它並嘗試外部。仍然不起作用。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="COMCliSer.dll"
version="1.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="COMSer.dll"
version="1.0.0.0"
/>
</dependentAssembly>
</dependency>
</assembly>
在進一步的調查,我可以得到這一切工作,只要中間的DLL也是免費註冊和exe有一個應用程序清單。只要我註冊中間的DLL,並放棄應用程序清單(我沒有控制什麼exe將使用我的DLL),整個事情停止工作。
如果exe沒有清單,那麼dll的清單就沒有考慮在內。我可以通過設置一切工作來證明這一點。然後在程序集清單中輸入一個錯誤。該彈出通常的消息:
無法創建過程:此應用程序無法啓動,因爲應用程序配置不正確。重新安裝該應用程序可能會解決此問題。
如果我然後刪除應用程序清單,應用程序加載(儘管是CoCreateInstance的失敗,因爲它的依賴不會考慮)
爲什麼你叫裝配'comser.dll'?程序集清單信息是否合併?使用描述性名稱部署程序集要容易得多,例如「Microsoft.VC90.CRT」,包含不同名稱的dll:「msvcr90.dll」。在處理dll程序集時,由於單個清單現在有兩個用途:調用程序集的內容給用戶,以及描述程序集中dll的依賴關係,因此調試變得更加困難。 – 2010-10-20 12:41:24
這些名字已經改變,以保護無辜!那些不是真名。這些是本機COM dll而不是.NET程序集。 – Steve 2010-10-20 13:31:30
另外,「不起作用」算作什麼?是否exe和第二個DLL加載,並簡單地未能實例化第三,或exe的,或第二個DLL無法完全加載?讓事情實際上無法加載是一個好的步驟,因爲它意味着系統正在查看清單,並至少將錯誤記錄到系統或應用程序事件日誌中。如果它簡單地失敗了對CoCreateInstance的調用,那麼它可能根本看不到該清單。 – 2010-10-20 15:57:52