2010-05-24 75 views
2

我想使用清單來指定對COM服務器的依賴關係(reg-free COM)。我可以使用清單來指定COM服務器上的可選依賴項嗎?

如果沒有COM服務器,消費者應用程序大多可以正常工作 - 只有1.7%的功能使用COM服務器。因此,用普通的舊regsvr32它會開始和工作正常,直到用戶會做一些事情,會觸發CoCreateInstance()調用,在這一點上,消費者會收到一條錯誤消息。

現在我已經使用了一段時間的清單,看起來消費者甚至不會啓動,除非它依賴的COM服務器程序集存在於文件系統中。這不好。

我添加了「addiditional清單」,內容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <dependency> 
     <dependentAssembly> 
      <assemblyIdentity 
       type="win32" 
       name="TheComServer.X" 
       version="1.0.0.0"/> 
     </dependentAssembly> 
    </dependency> 
</assembly> 

是否有使用無REG-COM與體現,使依賴可選的方式 - 讓消費者程序啓動並工作正常直到CoCreateInstance()實際上被稱爲?

+0

嘿,你知道嗎?這裏同樣的問題。這非常煩人,如果依賴不存在,應用程序根本無法運行,因爲它是可選的(就像插件或其他東西)。 – natenho 2016-12-20 13:51:59

+0

@natenho Nope,最終沒有明顯的依賴關係。 – sharptooth 2016-12-20 14:01:20

回答

2

您將不得不提供至少免註冊組件的清單。

應用程序清單引用應用程序需要的程序集 - 組件清單在應用程序啓動時處理 - 並指定程序集導出的com對象。

他們被指定爲激活上下文被加載。

您可以使用激活上下文API手動創建激活上下文並將加載程序集加載到其中 - 然後確保當您嘗試CoCreateInstance時該上下文是當前上下文。

+0

是的,我知道他們必須指定。但他們可以被指定爲可選? – sharptooth 2010-05-25 05:13:35

+1

無論進入進程清單是在應用程序啓動時解決,並且沒有可選依賴關係的概念。因此,從流程清單中刪除此信息,並使用此信息創建新清單。在你想調用CoCreateInstance的時候,你可以加載第二個清單並使用激活上下文API手動激活它:http://msdn.microsoft.com/en-us/library/aa374151(VS.85)。 aspx一直處理第二個清單不存在的情況。 – 2010-11-24 05:51:28

相關問題