"Babble, Babble - Over":Sections 1, 2 and 3 are the normal uninstall approaches (and hence recommended). Personally I use option 3 or 5 from section 3 (both options with logging, but option 5 runs silently
as well). If you are very busy, skip all the babble and go for one
of these - it will get the job done.
此处的所有MSI文件都将分配一个随机名称(十六进制格式),但您可以通过显示Windows资源管理器状态栏(查看->;状态栏),然后选择一个MSI来获取有关每个MSI的信息。MSI的摘要流将显示在Windows资源管理器窗口的底部。Or正如Christopher Galpin指出的那样,打开Windows资源管理器中的“注释”列并选择MSI文件(see this article for how to do this)李>
还请记住,可以使用WMIC命令启动卸载:
wmic product get name
-->;这将列出所有已安装应用程序的名称wmic product where name='myappsname' call uninstall
-->;这将卸载该应用程序卸载MSI软件包的方法有很多种。以下内容旨在作为“参考”:
总之您可以通过以下方式卸载:msiexec.exe,ARP,WMI,PowerShell,部署系统,如SCCM,VBScript/COM自动化,DTF,或通过隐藏的Windows缓存文件夹,以及下面介绍的一些其他选项
前几段提供了重要的MSI花絮,然后有14个章节提供了卸载MSI文件的不同方法。普
如果您在完全卸载时遇到问题,并且正在寻找不推荐的
MsiZap.exe和/或Windows Installer清理实用程序(msicu2.exe),您可以尝试新的FixIt tool from Microsoft(or the international page)。显然,可能也适用于其他安装问题更新的清理方法列表:Cleaning out broken MSI uninstalls
如果您认为MSI和Windows Installer的问题比它的价值更大,那么您可能需要阅读the corporate benefits of using MSI files
Installscript MSI设置通常包装在setup.exe文件中。要阅读有关用于卸载此类设置的参数的更多信息,请参阅以下链接:setup.exe pdf reference sheet,Setup.exe and Update.exe Command-Line Parameters
一些MSI文件通过Burn(WiX工具包)或InstallShield Suite项目等机制作为捆绑包的一部分安装。这会使卸载与下面看到的略有不同。这里是an example for InstallShield Suite projects
请注意,以静默方式运行卸载或以交互方式运行卸载可能会导致不同的结果(!)。关于这种情况的详细描述,请阅读以下帖子:Uninstall from Control Panel is different from Remove from .msi
如果在尝试卸载时意外地要求您提供原始安装介质,请阅读以下回答:Why does MSI require the original .msi file to proceed with an uninstall?,或者阅读下面第12节,了解一些重要的技术细节
如果安装了CCleaner或类似的清理工具,可以跳到第11节
如果卸载完全失败(无法运行),请参阅第12节&;下面13,了解使用system restore和/或清理工具“撤消安装的潜在方法
1-
Using the original MSI
2-
Using the old ARP Applet OR new Windows 8/10 Settings Interface
只是提到了正常的方法,虽然这是显而易见的
ARP
=Add / Remove Programs Applet
(appwiz.cpl
)Windows 10 Settings Interface
=>;相同操作的新外壳ARP:
设置界面(Windows 8/10):
Apps & Features
。选择条目并卸载李>ms-settings:appsfeatures
并按Enter键3-
Using msiexec.exe command line (directly or via a batch file)
/qn
添加到中,使卸载在静默模式下运行。这是从添加/删除小程序触发卸载时的运行方式李>选项3.1:基本交互式卸载(访问原始MSI文件):
选项3.2:通过产品GUID进行基本交互式卸载(无法访问原始MSI文件-here is how to find the product GUID-与下面相同的链接):
选项3.3:使用详细日志文件进行交互式卸载:
选项3.4:使用刷新的详细日志文件进行交互式卸载(verbose, flush to log option-连续写入日志,速度可能非常慢):
刷新到日志选项使卸载变慢,因为日志文件是连续写入的,而不是成批写入的。这样可以确保在安装程序崩溃时不会丢失日志缓冲区
换句话说,如果安装程序正在崩溃,并且详细日志文件中没有有用的信息,请启用此选项。删除感叹号以关闭“刷新到日志”选项,卸载将更快。您仍然会得到详细的日志记录,但如上所述,一些日志缓冲区可能会丢失
选项3.5(推荐):使用详细日志文件进行静默卸载-禁止重新启动(不刷新日志-请参阅前面的选项了解其含义):
快速参数解释(因为我推荐此选项):
再次说明,如何查找产品guid:How can I find the product GUID of an installed MSI setup?(如果您没有在卸载命令中指定的原始MSI,则用于卸载)
顶部提示:如果为卸载创建日志文件,则可以通过searching for "value 3"在日志中查找问题。这对于详细文件特别有用,因为它们非常详细:-)
如何查找已安装MSI的产品GUID
有关日志记录的更多信息,请访问installsite.org:How do I create a log file of my installation?-各种选项的详细概述以及InstallShield日志记录的详细信息
Msiexec (command-line options)-MSDN中msiexec.exe的命令行概述。这里是the Technet version
4-
Using the cached MSI database in the super hidden cache folder
5-
Using
{a31}有a similar, but more comprehensive PowerShell script available on MSDN。它允许在多台计算机上运行卸载
由“均匀”添加的条目:
此方法可行,但访问WMI类Win32_产品将触发软件一致性检查,该检查非常缓慢,在特殊情况下,它可能会触发MSI自修复。请参阅本文:Powershell Uninstall Script - Have a real headache
我自己没有测试过,但是$app.Uninstall()可能会运行在ARP小程序注册表设置中注册的卸载字符串。这意味着在某些情况下,它可能会运行“修改”而不是“卸载”
有关通过Powershell卸载的更多详细信息和方法,请参阅本主题:How can I uninstall an application using PowerShell?
6-
Using the .NET DTF Class Library
(部分the WiX toolkit)7-
Using the
{a45}下面是关于此选项的社区讨论:Windows Installer Automation API community sample
可以通过script automation and C++ API calls(我在serverfault.com上的帖子)访问API
以下来源改编自MSI专家Christopher Painter,使用VBScript:
下面是另一个用于按GUID从Symantec卸载的VBScript:http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry
Uninstall via upgrade code & ConfigureProduct
8-
Using a
{a52}9-
Using Deployment Systems / Remote Administration Systems
10-
Using WMI - Windows Management Instrumentation
Win32_Product.Install
调用InstallWin32_Product.Uninstall
调用卸载11-}
Using a third-party tool such as
{a63}{12-{}}
{} {msizap.exe,尽管它已弃用,不受支持和过时。不应在任何较新的Windows版本上使用它msizap.exe)也有一个GUI可用(msicu2.exe)。这两种工具都不受欢迎李>This newer support tool(此工具现在也不推荐使用)可以在最新的Windows版本上尝试,如果您有需要卸载的已失效MSI包李>13-}
Using
{a75}{14-
Windows Installer Functions (C++)
为了完整性,我想我们应该提到它的核心——从金属到金属的方式:the Win32 Windows Installer API functions。这些功能可能是大多数(如果不是以上列出的所有其他方法的话)“发动机罩下”所使用的功能。它们主要用于将MSI作为一种技术直接处理的应用程序或解决方案
serverfault.com上有一个答案,它可能与a summary of the different programmatic approaches for uninstalling(com自动化、.NET、Win32安装程序函数)有关
下面将找到一个C++代码片段,它展示了如何使用对InstallShield Suite的调用,通过产品代码卸载^ {< CD33 > }。要卸载另一个产品,请将为
prodcode
指定的GUID替换为您产品的GUID。要查找产品代码,请参见以下答案:How can I find the product GUID of an installed MSI setup?卸载将在完全GUI模式下进行。要在静默模式或其他GUI模式(精简、基本等)下运行,请参阅:MsiSetInternalUI function
截至2018年9月,使用最新版本的Visual Studio 2017制作并测试了该片段:
< L> > P>从Visual C++ +Gt中创建一个新的“Windows控制台应用程序”;Windows桌面- 2018年9月更新:模板再次更改。我不再看到上述问题李>
- 代码中的MSDN链接列出了从msiexec.exe返回的可能错误消息李>
将上述代码复制并粘贴到您的主CPP文件中(替换其中的任何内容)
那应该能够运行代码。可能设置一个断点,构建并运行
注意VS2017中默认模板的更改,以及可能导致的奇怪错误:There are too many errors for the IntelliSense engine to function correctly。简单回答:你不能。使用MSIEXEC/x
详细回答:当您直接在命令行上运行MSI文件时,所发生的一切就是它为您运行MSIEXEC。此关联存储在注册表中。您可以通过(在Windows资源管理器中)转到“工具/文件夹选项/文件类型”查看关联列表
例如,您可以从命令行运行.DOC文件,写字板或WinWord将为您打开它
如果查看注册表中的
HKEY_CLASSES_ROOT\.msi
,您将看到.MSI文件与ProgID“MSI.Package”相关联。如果查看HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command
,您将看到Windows在“运行”一个.MSI文件时实际使用的命令行相关问题 更多 >
编程相关推荐