5

我想检查是否已安装 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 的包组件(文件、目录),而不是寻找包本身。

那么我该怎么做呢?

4

3 回答 3

3

正如这里所建议的:

尝试在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>
于 2009-05-13T12:58:25.867 回答
3

您可以使用升级表

<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 提供的内容。如果你不 - 试试这个解决方案

于 2013-10-29T16:52:49.133 回答
1

Windows 安装程序 API 具有执行此操作的MsiQueryProductState功能msi.dll。不幸的是,您必须编写自定义操作才能在安装程序中使用它。中的组件C:\Program Files\Windows Installer XML v3\SDK可能会使这更容易。

于 2009-05-13T00:20:30.520 回答