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

dan*_*adu 3 clickonce windows-installer wix

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

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

如果我可以找到一个路径或某个注册表项来告诉我应用程序的安装位置,我可以通过条件中止 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>
Run Code Online (Sandbox Code Playgroud)

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

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

<Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" />
Run Code Online (Sandbox Code Playgroud)

现在一切都很好。

Rob*_*Net 5

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

HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
Run Code Online (Sandbox Code Playgroud)

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