Wix 使用msiexec卸载程序后,它将保留在控制面板中(添加/删除程序)
这似乎真的很奇怪。我安装了一个程序(通过WiX安装程序),我正试图通过编程方式(使用c#)卸载它,所以我使用msiexec.exe/x{product code GUID}。程序已卸载,但仍显示在控制面板(添加/删除程序)中。当我查看注册表时,我在HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\下看到该程序,但它不在该产品作为其产品代码的GUID下。它在一个看似随机的GUID下,而这个GUID甚至不存在于.msi中。有人知道我为什么以及如何知道GUID是什么,以便我可以通过编程删除它吗 我想我可以安装卸载和检查注册表所需的每个版本,并使用其中的GUID。这将起作用,但我想了解GUID与产品代码不匹配的原因Wix 使用msiexec卸载程序后,它将保留在控制面板中(添加/删除程序),wix,windows-installer,Wix,Windows Installer,这似乎真的很奇怪。我安装了一个程序(通过WiX安装程序),我正试图通过编程方式(使用c#)卸载它,所以我使用msiexec.exe/x{product code GUID}。程序已卸载,但仍显示在控制面板(添加/删除程序)中。当我查看注册表时,我在HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\下看到该程序,但它不在该产品作为其产品代码的GUID下。它在一个看似随机的GUID下,而这个GUID甚至不存在于.
更新时间:太平洋时间上午2:15-19:21 好的-我记录了卸载,这是日志的结尾。它似乎已成功完成,但仍显示在控制面板中:
MSI (s) (10:E4) [09:16:22:812]: Note: 1: 1724
MSI (s) (10:E4) [09:16:22:812]: Product: Product Name -- Removal completed successfully.
MSI (s) (10:E4) [09:16:22:812]: Windows Installer removed the product.
Product Name: Product Name. Product Version: 1.21.4. Product Language: 1033.
Manufacturer: . Removal success or error status: 0.
MSI (s) (10:E4) [09:16:22:870]: Deferring clean up of packages/files, if any
exist
MSI (s) (10:E4) [09:16:22:870]: MainEngineThread is returning 0
MSI (s) (10:80) [09:16:22:871]: RESTART MANAGER: Session closed.
MSI (s) (10:80) [09:16:22:871]: No System Restore sequence number for this
installation.
=== Logging stopped: 2/15/2019 9:16:22 ===
MSI (s) (10:80) [09:16:22:892]: User policy value 'DisableRollback' is 0
MSI (s) (10:80) [09:16:22:892]: Machine policy value 'DisableRollback' is 0
MSI (s) (10:80) [09:16:22:892]: Incrementing counter to disable shutdown.
Counter after increment: 0
MSI (s) (10:80) [09:16:22:892]: Note: 1: 1402 2:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (10:80) [09:16:22:894]: Note: 1: 2265 2: 3: -2147287035
MSI (s) (10:80) [09:16:22:894]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (10:80) [09:16:22:894]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied. Counter after decrement: -1
MSI (s) (10:80) [09:16:22:894]: Post-install cleanup: removing installer file 'C:\Windows\Installer\c8de6843.msi'
MSI (s) (10:80) [09:16:22:896]: Post-install cleanup: removing installer file 'C:\Windows\Installer\{2DE751D3-33F4-4C3E-BD12-63E7F7F0A3C9}\icon.ico'
MSI (s) (10:80) [09:16:22:896]: Post-install cleanup: removing installer folder 'C:\Windows\Installer\{2DE751D3-33F4-4C3E-BD12-63E7F7F0A3C9}\' (if empty)
MSI (s) (10:80) [09:16:22:896]: Note: 1: 2318 2:
MSI (s) (10:80) [09:16:22:897]: Destroying RemoteAPI object.
MSI (s) (10:B4) [09:16:22:897]: Custom Action Manager thread ending.
MSI (c) (78:7C) [09:16:22:898]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied. Counter after decrement: -1
MSI (c) (78:7C) [09:16:22:898]: MainEngineThread is returning 0
=== Verbose logging stopped: 2/15/2019 9:16:22 ===
实际解决方案(调试后):
运行:C:\ProgramData\Package Cache{Product GUID}\ProductSetup.exe/uninstall/quiet
重复安装:您可能有重复安装。除非在卸载过程中意外地使“添加/删除程序”小程序处于打开状态,否则应关闭并重新打开该小程序,以验证该条目是否仍然存在 “Noise”:如果存在太多的程序包,您可能会遇到问题,无法看到setup.exe已作为两个单独的MSI安装 文件夹。要防止出现这种情况,请在干净的虚拟机上测试并检查添加/ 删除其他相关条目的程序列表 产品代码:您可以使用此处描述的方法之一,查找所有已安装产品的产品代码和产品名称: 可以尝试PowerShell一行程序或VBScript 回滚:请注意,如果卸载期间自定义操作失败,MSI可以回滚其卸载。这意味着回滚 成为重新安装或至少恢复 卸载已删除。因此,在这种情况下,看起来卸载已运行,但由于自定义操作失败,产品已恢复。因此,卸载从未“提交” 卸载:以下是几种卸载MSI软件包的方法:。当您卸载了所有条目后,我希望ARP条目消失。这是你自己的包裹吗?在这种情况下,重复安装非常常见,这是快速测试循环的副产品
压缩的guid:您在注册表中找到的guid通常是压缩的,或者换句话说,它们的格式与MSI中的格式不同 GUID转换示例:
HKEY_CLASSES_ROOT\Installer\Products
Packed GUID: 0076C0A639AEC2738817CDFC311D064A
Normal GUID: {6A0C6700-EA93-372C-8871-DCCF13D160A4}
详情如下:
LocalPackage:安装MSI时,所有系统上都会缓存一个本地包。它将位于
%SystemRoot%\Installer
中。您可以使用它来定位文件,然后在Windows资源管理器中右键单击它并选择“卸载”
这里的想法不是将此作为主要方法,而是
确定是否存在还需要卸载的隐藏MSI
从ARP中删除所有内容
下面是一个VBScript,用于显示本地包路径(在桌面上创建VB脚本文件,保存并双击。查找输出msinfo.csv
-双击并导入Excel或等效文件-或记事本):
'检索所有产品代码(使用ProductName和ProductVersion)
设置fso=CreateObject(“Scripting.FileSystemObject”)
设置输出=fso.CreateTextFile(“msinfo.csv”,True,True)
设置installer=CreateObject(“WindowsInstaller.installer”)
output.writeline(“产品代码、产品名称、产品版本、本地软件包”)
错误恢复下一步“我们忽略所有错误”
对于installer.ProductsEx中的每个产品(“,”,7)
productcode=product.productcode
名称=product.InstallProperty(“ProductName”)
version=product.InstallProperty(“VersionString”)
local=product.InstallProperty(“LocalPackage”)
output.writeline(productcode&“,”名称&“,”版本&“,”本地)(&local)
下一个
输出,关闭
类似的答案:
%SystemRoot%\Installer
文件夹中本地缓存的MSI的路径,然后您可以看到更多详细信息。让我们看看它是否还在,我会在答案中添加一个VBScript。谢谢你的脚本。从命令行卸载后,GUID不会出现在列表中,但它仍在注册表(和控制面板)中的三个位置:HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\、HKLM\SOFTWARE\Classes\Installer\Dependencies和HKCR\Installer\Dependencies。所以我的计划是按程序删除