3

我正在为之前使用 ClickOnce 部署的应用程序编写 WiX 安装程序。

我想检测应用程序是否安装在客户端计算机上并中止 MSI 安装。我在 Stack Overflow 上搜索了类似的问题,但找不到解决方法。

如果我能找到告诉我应用程序安装位置的路径或某个注册表项,我可以通过 Condition 中止 MSI 安装。

使用这个问题的答案,我能够到达某个地方。ClickOnce 快捷方式是扩展名为.appref-ms的文件。这是我使用的代码:

<Property Id="APP_CLICKONCE_INSTALLED">
    <DirectorySearch Id="dirSearch.APP.CLICKONCE" AssignToProperty="yes" Path="[StartMenuFolder]" Depth="2">
    <FileSearch Id="fileSearch.APP.CLICKONCE" Name="APP.appref-ms" />
    </DirectorySearch>
</Property>

<Condition Message="App is already installed. Please uninstall it then re-run this setup.">
    <![CDATA[APP_CLICKONCE_INSTALLED = "" OR INSTALLED]]>
</Condition>

但是,StartMenuFolder提供了AllUsers配置文件的位置,而单击一次应用程序是为当前用户安装的。我还在挖。

使用perUser安装StartMenuFolder提供当前用户位置(我使用的是perMachine):

<Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" />

现在一切都很好。

4

1 回答 1

5

我对 WiX 一无所知,但判断是否安装了 ClickOnce 应用程序的另一种方法是遍历注册表中的卸载字符串,这些字符串位于:

HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

您需要搜索应用程序的产品名称与该组键的显示名称相匹配的一个。

于 2012-05-08T07:52:48.567 回答