问题 1:启动条件
LaunchConditions 必须始终评估为真,设置才能安装/运行。这里有一些进一步的细节:Failing condition wix(推荐用于更多上下文)。当您通过Add / Remove Programs 调用卸载时,它将以静默模式运行安装程序(我相信UILevel = 2 或UILevel = 3),这会使您的LaunchCondition 失败,因为UILevel 不等于5。
OR 已安装:防止LaunchConditions 在全新安装以外的其他安装模式下触发问题的常用技术是将OR Installed 添加到LaunchCondition有问题。这将强制 LaunchCondition 在已安装产品的所有情况和模式下为真(modify、uninstall、repair、etc...)。
所以像这样的东西可能会作为一个更新的条件起作用:
Installed OR UILevel = 5
方法错误?:话虽如此,我宁愿实施检查以确定您需要指定的值是否已通过 PUBLIC 属性在命令行上设置为静默安装,而不是那种相当奇怪的 LaunchCondition 检查安装程序的 GUI 级别。您仍然可以将其实现为 LaunchCondition - 或使用自定义操作以获得更大的灵活性。 LaunchCondition 将检查所有关键设置参数的值,并且您将使用 OR Installed 机制阻止它们在卸载和其他模式下运行。以下是关于silent installation、transforms 和public properties 主题的答案:How to make better use of MSI files(静默部署对于企业部署和软件验收至关重要)。
问题2:强制卸载
更新:为了完整起见,底部列出了几个附加选项。
2.1 - ARP 修改:在进入太多疯狂的细节之前,我想运行你最简单的选项。 Modify 选项是否可用于您在 Add / Remove Programs 中的设置?如果是这样,请单击它,然后查看是否可以从设置的Modify dialogs 中选择删除。这应该可以工作(因为在选择Modify 时,您通常不会在静默模式下运行安装程序)。
2.2 - 交互式 msiexec.exe 卸载命令:我忘了补充一点,您应该能够通过命令行启动交互式卸载,如下所示:msiexec.exe /x {PRODUCT-GUID} /qf .您可以通过以下方式找到产品 GUID:How can I find the product GUID of an installed MSI setup?总结:您可以按照链接中的说明找到产品 GUID,然后打开 cmd.exe 窗口并启动卸载命令如上所示。
2.3 - Microsoft FixIt:如果上面的第一个选项不可用,还有其他几个选项可以工作,但在尝试之前,我建议您提供@987654324 @有机会看看这是否对您有用。运行它,选择你的安装,看看是否有一些自动魔法可以让你卸载它。
2.4 - 高级(尽可能避免) - 破解系统缓存的 MSI:如果上述方法失败,此答案将是下一步:I screwed up, how can I uninstall my program? 请如果上述方法不起作用,请告诉我们,我们将在此处检查选项。我只会压缩缓存的 MSI 并禁用启动条件,但如果你能避免的话,这太麻烦了。
更新:添加了以下内容,但不是解决问题所必需的。不推荐,这是最后的手段。把内容留在里面。
查找缓存的 MSI:您可以 find the system cached MSI using Powershell as explained here。我将在这里内联Powershell命令:
gwmi -Query "SELECT Name,LocalPackage FROM Win32_Product WHERE
IdentifyingNumber='{PRODUCT-GUID}'" | Format-Table Name,
LocalPackage
然后您使用Orca or an equivalent tool 打开缓存文件(先对其进行备份或压缩),然后进行所需的任何更改以使卸载正常运行。这通常不被认为是一种理智的方法——它是最后的手段。您在 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(如果它在野外并且到处都有大量安装)等等...