我已将以下内容添加到我的WIX模板中,以防止安装而无需在自定义对话框中输入值。
<Condition Message='This installation can only run in full UI mode.'>
<![CDATA[UILevel = 5]]>
</Condition>
当我尝试卸载应用程序时,收到此消息,我无法继续。
如何解决此问题,使其不适用于卸载?
如何强行卸载此应用程序?
答案 0 :(得分:1)
对于能够安装/运行 的设置,LaunchConditions必须始终评估为true。此处还有一些详细信息: Failing condition wix (建议用于更多上下文)。当您通过Add / Remove Programs
调用卸载时,它将以静默模式运行安装程序(我相信UILevel = 2
或UILevel = 3
),但由于LaunchCondition
未UILevel
等于5
。
或已安装 :防止LaunchConditions
在全新安装以外的其他安装模式中触发问题的常用技巧是将OR Installed
添加到问题LaunchCondition
。这将强制LaunchCondition
适用于已安装产品的所有情况和模式(modify
,uninstall
,repair
,etc...
)。< / p>
所以这样的事情可能会作为一个更新的条件:
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.1 - ARP修改 :我想在进入太多疯狂的细节之前运行最简单的选项。 Modify
中的Add / Remove Programs
选项是否适用于您的设置?如果是,请点击它,看看您是否可以从设置Modify dialogs
中选择删除。这应该有效(因为在选择Modify
时)通常不会以静默模式运行设置。
2.2 - 交互式msiexec.exe卸载命令 :我忘了添加您应该能够通过命令行启动交互式卸载,如下所示:{{1 }}。以下是您可以找到产品的方法GUID:How can I find the product GUID of an installed MSI setup? 所以在summmary :您可以找到链接中说明的产品GUID,然后打开msiexec.exe /x {PRODUCT-GUID} /qf
窗口并开火关闭上面指出的卸载命令。
2.3 - Microsoft FixIt :如果上面的第一个选项不可用,还有其他几个选项可以使用,但在尝试之前我会建议给予{{ 3}有机会看看这是否适合你。运行它,选择你的安装,看看是否有一些自动魔术可以让你卸载它。
2.4 - 高级(如果可以,请避免) - 破解系统缓存的MSI :如果上述操作失败,则此答案将成为下一步:{{3}如果以上内容不起作用,请告知我们,我们将在此处查看选项。我只是压缩缓存的MSI并禁用启动条件,但如果你能避免它,那就太舒服了。
更新:添加了以下内容,但不需要解决问题。不推荐,这是最后的选择。留下内容。
查找缓存的MSI :您可以the Microsoft FixIt tool for installation / uninstallation problems。我将在此处内联Powershell命令:
cmd.exe
然后使用I screwed up, how can I uninstall my program?打开缓存的文件(首先对其进行备份,或将其压缩),然后进行必要的更改以使卸载正常运行。这通常不被认为是一种理智的方法 - 它是最后的手段。你在MSI中所做的改变取决于它的错误。这需要专业的MSI知识。这很容易搞砸,所以卸载变得更加困难。
我刚刚看到你在写这篇文章的同时卸下了产品。 PUH!很高兴你不需要后一种方法。我想我会提交它并将其设置为三角形,因此它是可见的但不推荐(如果只是为了我自己可以重复使用)。
更新,一些其他替代方案(并非总是适用,包括供参考和潜在重复使用):gwmi -Query "SELECT Name,LocalPackage FROM Win32_Product WHERE
IdentifyingNumber='{PRODUCT-GUID}'" | Format-Table Name,
LocalPackage
如果您可以访问用于安装软件的原始MSI(它必须是用于安装的MSI的确切副本),然后您可以尝试双击它,这应该直接进行修改。 1)
如果您不再拥有原始安装MSI,也可以双击系统缓存文件夹中的文件。 2)
您可以修改注册表中的卸载字符串以强制进行非静默卸载:
3)
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
可能还有其他方法。例如,HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
攻击要在卸载期间应用的转换,4)
修补已安装的MSI(如果它在野外,到处都有大量安装),等等......