我正在为之前使用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" />
现在一切都很好。
答案 0 :(得分:3)
我对WiX一无所知,但另一种判断是否安装了ClickOnce应用程序的方法是遍历注册表中的卸载字符串,其中包括:
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
您需要搜索应用程序的产品名称与该组密钥的显示名称匹配的名称。