2013-10-18 25 views
0

我很難得到維克斯3.7燒傷捆綁工作。我想檢查系統上是否存在特定的COM庫(這是一個先決條件)。我已經試過:維克斯燒傷檢測COM DLL的存在

  1. util:RegistrySearchSOFTWARE\Classes\Installer\Assemblies\Globalinterop.name, Version=1.170.0.0, ... - 我不能添加一個通配符,鍵名包含版本
  2. [%WINDIR%]\Windows\assembly\GAC_MSIL\interop.name\1.170.0.0__a59bfa3a209beb60\interop.name.dll - 再次,不能添加一個通配符,我不知道我是否可以認爲它總是在GAC_MSIL下
  3. util:ComponentSearch - 我不知道如何找出guid來搜索 - 它似乎總是返回false,無論我嘗試。
  4. 非實用程序,常規FileSearch - 似乎不能在bootstrap內工作。
  5. 我也注意到HKCR\TypeLib\{F1E91071-83CC-4766-90BA-E038B005ACE}條目,但是我不確定它是否可靠檢查?

有什麼好的簡單方法來檢查GAC中的COM DLL嗎?我不介意,如果在某些邊界情況下(例如未完全卸載),它會錯過某些內容,我只想覆蓋大部分情況並避免因不可靠的檢查而阻止安裝。

+0

在大多數情況下,只要啓動第三方安裝程序即可安裝足夠的依賴版本(如果組件的創建者可以使用該安裝程序),就會更簡單並且更易於解耦。許多依賴項都是一套文件的一部分,因此檢查一個文件通常是不夠的。這樣的安裝程序本身應該能夠處理自己已經安裝的情況,升級等。畢竟,您的安裝系統中已經有了引導程序。 –

+0

是的,你有一點,但不幸的是,它有點像使用辦公互操作 - 我依賴的應用程序比我的應用程序更大,我的更多的是它的實用程序。我只想確保有人不會犯一些愚蠢的錯誤 - 我知道如果用戶稍後決定卸載依賴關係,我的應用程序將崩潰。 – trakos

回答

0

我已經結束了使用msi包中的條件和常規FileSearch,它可能有點煩人,引導程序在msi包和此檢查運行之前安裝所有先決條件,但我可以忍受它。

<Property Id="DEP_EXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="$(env.WINDIR)\assembly\" Depth="10" AssignToProperty="yes"> 
    <FileSearch Id="CheckFile" Name="Interop.Dependency.dll" /> 
    </DirectorySearch> 
</Property> 
<Condition Message="Dependency not found!">DEP_EXISTS</Condition> 

工作正常,我可以告訴。