我很难让 wix 3.7 刻录捆绑包工作。我想检查系统上是否存在特定的COM库(这是先决条件)。我试过:
-
util:RegistrySearch
interop.name, Version=1.170.0.0, ...
下的SOFTWAREClassesInstallerAssembliesGlobal
- 我无法添加通配符,并且键名包含版本 -
util:FileSearch
[%WINDIR%]WindowsassemblyGAC_MSILinterop.name1.170.0.0__a59bfa3a209beb60interop.name.dll
- 再次,无法添加通配符,我不确定我是否可以假设它将始终处于GAC_MSIL - 不确定如何找到要搜索的 guid - 无论我尝试什么,它似乎总是返回 false。
- 非实用的常规文件搜索 - 似乎在引导程序中不起作用。
- 我还注意到一个
HKCRTypeLib{F1E91071-83CC-4766-90BA-E038B005ACE}
条目,但同样,我不确定检查它是否可靠?
util:ComponentSearch
- 我是否有任何好的简单方法来检查 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>
据我所知,效果很好。