Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用WiX检测通过ClickOnce安装的应用程序?_Wix_Clickonce_Windows Installer - Fatal编程技术网

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

如何使用WiX检测通过ClickOnce安装的应用程序?,wix,clickonce,windows-installer,Wix,Clickonce,Windows Installer,我正在为以前使用ClickOnce部署的应用程序编写WiX安装程序 我想检测应用程序是否安装在客户端计算机上,并中止MSI安装。我在StackOverflow上搜索了类似的问题,但找不到一种方法 如果我能找到一个路径或某个注册表项来告诉我应用程序的安装位置,我可以通过一个条件中止MSI安装 用这个问题的答案,我终于找到了答案。ClickOnce快捷方式是扩展名为.appref ms的文件。这是我使用的代码: <Property Id="APP_CLICKONCE_INSTALLED">

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

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

如果我能找到一个路径或某个注册表项来告诉我应用程序的安装位置,我可以通过一个条件中止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配置文件的位置,而click once应用程序是为当前用户安装的。我还在挖

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



现在一切都好了。

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

HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

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

如果您是对的,请单击“安装程序”在卸载位置插入一个条目(与任何其他Windows安装程序一样)。按键不同,但我可以依靠DisplayName查找我的应用程序。
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall