Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 使用msiexec卸载程序后,它将保留在控制面板中(添加/删除程序)_Wix_Windows Installer - Fatal编程技术网

Wix 使用msiexec卸载程序后,它将保留在控制面板中(添加/删除程序)

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甚至不存在于.

这似乎真的很奇怪。我安装了一个程序(通过WiX安装程序),我正试图通过编程方式(使用c#)卸载它,所以我使用msiexec.exe/x{product code GUID}。程序已卸载,但仍显示在控制面板(添加/删除程序)中。当我查看注册表时,我在HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\下看到该程序,但它不在该产品作为其产品代码的GUID下。它在一个看似随机的GUID下,而这个GUID甚至不存在于.msi中。有人知道我为什么以及如何知道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}
详情如下:

后一个链接有一个VBScript,用于将压缩guid转换为普通guid


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)
下一个
输出,关闭

类似的答案


解决方案是运行C:\ProgramData\Package Cache{产品GUID}\ProductSetup.exe/uninstall/quiet。虽然斯坦因没有直接回答这个问题,但他回答了,所以我“结束”了这个问题,并给了他信任

谢谢,但那不起作用。我运行了文章中描述的PowerShell实用程序,它显示的GUID与我在Orca中看到的产品代码相同,但与HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall下显示的GUID不同,这就是为什么它仍然显示在控制面板中的原因。当我删除该注册表项时,它将离开CP。您永远不能从这些项中删除任何内容。这些密钥是MSI数据库的内部构件,很容易损坏。您可以做的是运行一个VBScript,该脚本将向您显示
%SystemRoot%\Installer
文件夹中本地缓存的MSI的路径,然后您可以看到更多详细信息。让我们看看它是否还在,我会在答案中添加一个VBScript。谢谢你的脚本。从命令行卸载后,GUID不会出现在列表中,但它仍在注册表(和控制面板)中的三个位置:HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\、HKLM\SOFTWARE\Classes\Installer\Dependencies和HKCR\Installer\Dependencies。所以我的计划是按程序删除