我想检查是否已安装Crystal Reports Basic for Visual Studio 2008作为我自己的安装包的条件。
我在此产品的引导程序说明中找到了这个(C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ CrystalReports10_5 \ product.xml):
<InstallChecks>
<MsiProductCheck Property="CRVSInstalled" Product="{AA467959-A1D6-4F45-90CD-11DC57733F32}"/>
<MsiProductCheck Property="CRVSRunTimex86Installed" Product="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}"/>
<MsiProductCheck Property="CRVSRunTimex64Installed" Product="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}. "/>
</InstallChecks>
尝试在WiX中模仿这种行为,我做了以下事情:
<Property Id="CRVSINSTALLED">
<ComponentSearch Id="CRVSInstalledSearch" Guid="{AA467959-A1D6-4F45-90CD-11DC57733F32}" />
</Property>
<Property Id="CRVSRUNTIMEX86INSTALLED">
<ComponentSearch Id="CRVSRunTimex86InstalledSearch" Guid="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" />
</Property>
<Property Id="CRVSRUNTIMEX64INSTALLED">
<ComponentSearch Id="CRVSRunTimex64InstalledSearch" Guid="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" />
</Property>
<Condition Message="!(loc.CrystalReportsRequired)">Installed OR CRVSINSTALLED OR CRVSRUNTIMEX86INSTALLED OR CRVSRUNTIMEX64INSTALLED</Condition>
但似乎ComponentSearch
正在寻找具有自己的id的包组件(文件,目录),而不是寻找包本身。
那我怎么能这样做呢?
答案 0 :(得分:3)
根据建议here:
在
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\
{productcode}
下尝试注册表搜索。如果您的产品和依赖项都是每用户产品,请考虑在HKCU
下进行搜索。
这是这样的:
<Property Id="CRVSINSTALLED">
<RegistrySearch Id="CRVSInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{AA467959-A1D6-4F45-90CD-11DC57733F32}" Name="InstallDate" Type="raw" />
</Property>
<Property Id="CRVSRUNTIMEINSTALLED">
<RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" Name="InstallDate" Type="raw" />
</Property>
<Property Id="CRVSRUNTIMEINSTALLED">
<RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" Name="InstallDate" Type="raw" />
</Property>
答案 1 :(得分:2)
您可以使用Upgrade table
<Upgrade Id="36E76465-5548-390F-955A-2776582C6A6C">
<UpgradeVersion OnlyDetect="yes" Property="TFSCLIENT" Minimum="11.0.50727" />
</Upgrade>
<Condition Message="ERROR: Team Explorer for Microsoft Visual Studio 2012 is not installed">
Installed OR TFSCLIENT
</Condition>
现在棘手的一点是找到升级代码(在上面的Id属性中指定)。 如果您有MSI包,请通过Orca查看。 如果您不这样做 - 请尝试this solution。
答案 2 :(得分:1)
Windows安装程序API在msi.dll
中具有MsiQueryProductState
功能来执行此操作。不幸的是,您必须编写自定义操作才能在安装程序中使用此操作。 C:\Program Files\Windows Installer XML v3\SDK
中的程序集可以使这更容易。