卸载具有完整 ui 模式条件的 msi(wix 工具集)

Uninstall msi with full ui mode condition (wix toolset)

我已将以下内容添加到我的 WIX 模板中,以防止在我创建的自定义对话框中不输入值的情况下进行安装。

    <Condition Message='This installation can only run in full UI mode.'>
        <![CDATA[UILevel = 5]]>
    </Condition>

当我尝试卸载应用程序时收到此消息,但我无法继续。

  1. 如何解决此问题,使其不适用于卸载?

  2. 如何强制卸载这个应用程序?

问题 1:LaunchCondition

LaunchConditions 的计算结果必须始终为真,安装程序才能安装/运行。这里有一些更详细的信息:(推荐用于更多上下文)。当您通过 Add / Remove Programs 调用卸载时,它将 运行 安装程序处于静默模式(我相信 UILevel = 2UILevel = 3),这使您的 LaunchCondition 失败,因为 [=16] =] 不等于 5.

OR Installed:防止 LaunchConditions 在除全新安装以外的其他安装模式下触发问题的常用技术是将 OR Installed 添加到有问题的 LaunchCondition 中。这将强制 LaunchCondition 在已安装产品的所有情况和模式下为真(modifyuninstallrepairetc...)。

所以像这样的东西可能可以作为更新条件:

Installed OR UILevel = 5

错误的方法?:话虽如此,我宁愿实施检查以确定您需要指定的值是否已设置通过 PUBLIC 属性的命令行进行静默安装,而不是那种相当奇怪的 LaunchCondition 检查安装程序的 GUI 级别。您仍然可以将其实现为 LaunchCondition - 或使用自定义操作以获得更大的灵活性。 LaunchCondition 将检查所有关键设置参数的值,并且您可以使用 OR Installed 机制防止它们在卸载和其他模式下 运行ning。下面是关于silent installationtransformspublic properties的回答:How to make better use of MSI files(静默部署对于企业部署和软件验收)。


问题二:强行卸载

更新:为了完整性,在底部列出了几个额外的选项。

2.1 - ARP 修改:我想 运行 你的最简单的选择,然后再进入太多疯狂的细节. Modify 选项是否可用于 Add / Remove Programs 中的设置?如果是,请单击它并查看是否可以 select 从设置的 Modify dialogs 中删除。这应该有效(因为在选择 Modify 时,您通常不会 运行 在静默模式下设置)。

2.2 - 交互式 msiexec.exe 卸载命令:我忘了补充说你应该能够启动交互式通过命令行卸载如下:msiexec.exe /x {PRODUCT-GUID} /qf。以下是找到产品 GUID 的方法: 所以在总结 中:您按照 link 中的说明找到产品 GUID,然后打开 cmd.exe window 并启动上面指示的卸载命令。

2.3 - Microsoft FixIt:如果上面的第一个选项不可用,还有其他几个选项可以使用,但之前尝试一下我建议给 the Microsoft FixIt tool for installation / uninstallation problems 一个机会,看看这是否适合您。 运行 它,select 你的安装,看看是否有一些自动魔术可以让你卸载它。

2.4 - 高级(如果可以,请避免)- 破解系统缓存的 MSI:下一步将是这个答案,如果以上失败:I screwed up, how can I uninstall my program? 如果以上不起作用,请告诉我们,我们将检查此处的选项。我只想压缩缓存的 MSI 并禁用启动条件,但如果你能避免的话,这太老套了。

UPDATE: 添加了以下内容,但不是解决问题所必需的。不推荐,是不得已的办法。留下内容.

查找缓存的 MSI:您可以 。我将在此处内联 Powershell 命令:

gwmi -Query "SELECT Name,LocalPackage FROM Win32_Product WHERE
IdentifyingNumber='{PRODUCT-GUID}'" | Format-Table Name,
LocalPackage

然后使用 打开缓存文件(先备份,或压缩),并进行任何必要的更改以使卸载正常运行。这通常不被认为是明智的做法——这是最后的手段。您在 MSI 中所做的更改会有所不同,具体取决于它出了什么问题。这需要专业的 MSI 知识。很容易搞砸,卸载就更难了。


我刚看到你在写这篇文章时卸载了产品。呸!很高兴您不需要后一种方法。我想我会提交它并将其设置为删除线所以它是可见的但不推荐(如果只是为了我自己在需要时重用)。


更新,一些额外的替代方案(并不总是适用,包含以供参考和潜在的重复使用)1)如果您可以访问原来的 MSI安装你的软件(它必须是用于安装的 MSI 的精确副本),然后你可以尝试双击它,这应该会让你直接进入修改。 2) 如果您没有原来的安装MSI,您也可以双击系统缓存文件夹中的文件。 3) 您可能还可以修复注册表中的卸载字符串以强制进行非静默卸载:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

可能还有其他方法。例如 4) 破解一个转换以在卸载期间应用,5) 修补已安装的 MSI(如果它在野外到处都有大量安装),等等...