如何使用WiX检测通过ClickOnce安装的应用程序?

时间:2012-05-03 23:39:17

标签: wix clickonce windows-installer

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

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

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

使用this question的答案,我能够到达某个地方。 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" />

现在一切都很好。

1 个答案:

答案 0 :(得分:3)

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

HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

您需要搜索应用程序的产品名称与该组密钥的显示名称匹配的名称。