【问题标题】:How do I detect an application was installed via ClickOnce, using WiX?如何使用 WiX 检测通过 ClickOnce 安装的应用程序?
【发布时间】:2023-03-10 19:00:01
【问题描述】:

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

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

如果我可以找到告诉我应用程序安装位置的路径或某个注册表项,我可以通过条件中止 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" />

现在一切都很好。

【问题讨论】:

    标签: wix clickonce windows-installer


    【解决方案1】:

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

    HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
    

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

    【讨论】:

    • 您是对的,ClickOnce 安装程序会在卸载位置插入一个条目(与任何其他 Windows 安装程序一样)。键不同,但我可以依靠 DisplayName 找到我的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2012-06-25
    • 2019-12-13
    相关资源
    最近更新 更多