0

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

  1. util:RegistrySearchfor SOFTWARE\Classes\Installer\Assemblies\Globalunder interop.name, Version=1.170.0.0, ...- 我不能添加通配符,并且键名包含版本
  2. util:FileSearchfor [%WINDIR%]\Windows\assembly\GAC_MSIL\interop.name\1.170.0.0__a59bfa3a209beb60\interop.name.dll- 再次,不能添加通配符,我不确定我是否可以假设它总是在 GAC_MSIL 下
  3. util:ComponentSearch- 我不确定如何找到要搜索的 guid - 无论我尝试什么,它似乎总是返回 false。
  4. 非实用程序,常规文件搜索 - 似乎在引导程序中不起作用。
  5. 我也注意到了一个HKCR\TypeLib\{F1E91071-83CC-4766-90BA-E038B005ACE}条目,但同样,我不确定检查它是否可靠?

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

4

1 回答 1

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>

据我所知,工作正常。

于 2013-10-19T18:50:27.673 回答