卸载具有完整 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:LaunchCondition
LaunchConditions 的计算结果必须始终为真,安装程序才能安装/运行。这里有一些更详细的信息: (推荐用于更多上下文)。当您通过 Add / Remove Programs
调用卸载时,它将 运行 安装程序处于静默模式(我相信 UILevel = 2
或 UILevel = 3
),这使您的 LaunchCondition
失败,因为 [=16] =] 不等于 5
.
OR Installed:防止 LaunchConditions
在除全新安装以外的其他安装模式下触发问题的常用技术是将 OR Installed
添加到有问题的 LaunchCondition
中。这将强制 LaunchCondition
在已安装产品的所有情况和模式下为真(modify
、uninstall
、repair
、etc...
)。
所以像这样的东西可能可以作为更新条件:
Installed OR UILevel = 5
错误的方法?:话虽如此,我宁愿实施检查以确定您需要指定的值是否已设置通过 PUBLIC 属性的命令行进行静默安装,而不是那种相当奇怪的 LaunchCondition 检查安装程序的 GUI 级别。您仍然可以将其实现为 LaunchCondition - 或使用自定义操作以获得更大的灵活性。 LaunchCondition 将检查所有关键设置参数的值,并且您可以使用 OR Installed 机制防止它们在卸载和其他模式下 运行ning。下面是关于silent installation
、transforms
和public 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(如果它在野外到处都有大量安装),等等...
我已将以下内容添加到我的 WIX 模板中,以防止在我创建的自定义对话框中不输入值的情况下进行安装。
<Condition Message='This installation can only run in full UI mode.'>
<![CDATA[UILevel = 5]]>
</Condition>
当我尝试卸载应用程序时收到此消息,但我无法继续。
如何解决此问题,使其不适用于卸载?
如何强制卸载这个应用程序?
问题 1:LaunchCondition
LaunchConditions 的计算结果必须始终为真,安装程序才能安装/运行。这里有一些更详细的信息:Add / Remove Programs
调用卸载时,它将 运行 安装程序处于静默模式(我相信 UILevel = 2
或 UILevel = 3
),这使您的 LaunchCondition
失败,因为 [=16] =] 不等于 5
.
OR Installed:防止 LaunchConditions
在除全新安装以外的其他安装模式下触发问题的常用技术是将 OR Installed
添加到有问题的 LaunchCondition
中。这将强制 LaunchCondition
在已安装产品的所有情况和模式下为真(modify
、uninstall
、repair
、etc...
)。
所以像这样的东西可能可以作为更新条件:
Installed OR UILevel = 5
错误的方法?:话虽如此,我宁愿实施检查以确定您需要指定的值是否已设置通过 PUBLIC 属性的命令行进行静默安装,而不是那种相当奇怪的 LaunchCondition 检查安装程序的 GUI 级别。您仍然可以将其实现为 LaunchCondition - 或使用自定义操作以获得更大的灵活性。 LaunchCondition 将检查所有关键设置参数的值,并且您可以使用 OR Installed 机制防止它们在卸载和其他模式下 运行ning。下面是关于silent installation
、transforms
和public 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 的方法: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:您可以
gwmi -Query "SELECT Name,LocalPackage FROM Win32_Product WHERE
IdentifyingNumber='{PRODUCT-GUID}'" | Format-Table Name,
LocalPackage
然后使用
我刚看到你在写这篇文章时卸载了产品。呸!很高兴您不需要后一种方法。我想我会提交它并将其设置为删除线所以它是可见的但不推荐(如果只是为了我自己在需要时重用)。
更新,一些额外的替代方案(并不总是适用,包含以供参考和潜在的重复使用):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(如果它在野外到处都有大量安装),等等...