我正在为之前使用 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" />
现在一切都很好。