Wix 刻录检测 COM DLL 存在



我很难让 wix 3.7 刻录捆绑包工作。我想检查系统上是否存在特定的COM库(这是先决条件)。我试过:

  1. util:RegistrySearch interop.name, Version=1.170.0.0, ... 下的SOFTWAREClassesInstallerAssembliesGlobal - 我无法添加通配符,并且键名包含版本
  2. util:FileSearch [%WINDIR%]WindowsassemblyGAC_MSILinterop.name1.170.0.0__a59bfa3a209beb60interop.name.dll - 再次,无法添加通配符,我不确定我是否可以假设它将始终处于GAC_MSIL
  3. util:ComponentSearch - 我
  4. 不确定如何找到要搜索的 guid - 无论我尝试什么,它似乎总是返回 false。
  5. 非实用的常规文件搜索 - 似乎在引导程序中不起作用。
  6. 我还注意到一个HKCRTypeLib{F1E91071-83CC-4766-90BA-E038B005ACE}条目,但同样,我不确定检查它是否可靠?

是否有任何好的简单方法来检查 GAC 中是否存在 COM dll?我不介意在某些边界情况下(例如未完全卸载)它会错过一些东西,我只想涵盖大多数情况并避免由于不可靠的检查而阻止安装。

我最终在 msi 包中使用了条件和常规文件搜索,引导程序在 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>

据我所知,效果很好。

最新更新