<blockquote>
<h2>Express Options:</h2>
<p><em><strong>Uninstall by Product GUID:</strong></em> (<a href="https://stackoverflow.com/questions/29937568/how-can-i-find-the-product-guid-of-an-installed-msi-setup/29937569#29937569">find product GUID</a>) - section 3 below for logging. There is also: <a href="https://stackoverflow.com/questions/54453922/enable-installation-logs-for-msi-installer-without-any-command-line-arguments/54458890#54458890">MSI logging in depth here</a>:</p>
<pre><code>msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
</code></pre>
<p><em><strong>Uninstall by MSI file:</strong></em></p>
<pre><code>msiexec.exe /x "c:\filename.msi"
</code></pre>
<p><em><strong>Express Interactive:</strong></em></p>
<pre><code>Right click MSI file in Windows Explorer and select "Uninstall".
</code></pre>
</blockquote>
<hr/>
<p><strong>卸载MSI软件包的方法有很多种。以下内容旨在作为“参考”:</strong></p>
<p><strong>总之</strong>您可以通过以下方式卸载:<strong>msiexec.exe</strong>,<strong>ARP</strong>,<strong>WMI</strong>,<strong>PowerShell</strong>,部署系统,如<strong>SCCM</strong>,<strong>VBScript</strong>/COM自动化,<strong>DTF</strong>,或通过<strong>隐藏的Windows缓存文件夹</strong>,以及下面介绍的一些其他选项</p>
<p>前几段提供了重要的MSI花絮,然后有14个章节提供了卸载MSI文件的不同方法。普</p>
<blockquote>
<p><em><strong>"Babble, Babble - Over":</strong></em> <em>Sections <strong>1</strong>, <strong>2</strong> and <strong>3</strong> are the <strong>normal uninstall approaches</strong></em> (and hence recommended). <strong><code>Personally I use option 3 or 5 from section 3</code></strong> (both options with logging, but option 5 runs silently
as well). If you are <strong>very busy</strong>, skip all the babble and go for one
of these - it will get the job done.</p>
</blockquote>
<hr/>
<p>如果您在完全卸载时遇到<strong>问题,并且正在寻找不推荐的<del>MsiZap.exe</del>和/或Windows Installer清理实用程序(<del>msicu2.exe</del>),您可以尝试新的<a href="https://support.microsoft.com/en-us/help/17588/fix-problems-that-block-programs-from-being-installed-or-removed" rel="noreferrer"><strong>FixIt tool from Microsoft</strong></a>(<a href="http://support.microsoft.com/mats/Program_Install_and_Uninstall" rel="noreferrer">or the international page</a>)。显然,可能也适用于其他安装问题</p>
<p>更新的清理方法列表:<a href="https://stackoverflow.com/a/53876981/129130"><strong>Cleaning out broken MSI uninstalls</strong></a></p>
<hr/>
<p>如果您认为MSI和Windows Installer的问题比它的价值更大,那么您可能需要阅读<a href="https://serverfault.com/questions/11670/the-corporate-benefits-of-using-msi-files/274609#274609"><strong>the corporate benefits of using MSI files</strong></a></p>
<hr/>
<p><strong>Installscript MSI</strong>设置通常包装在<strong>setup.exe文件中。要阅读有关用于卸载此类设置的参数的更多信息,请参阅以下链接:<a href="http://www.itninja.com/static/090770319967727eb89b428d77dcac07.pdf" rel="noreferrer"><strong>setup.exe pdf reference sheet</strong></a>,<a href="http://helpnet.flexerasoftware.com/installshield20helplib/Content/helplibrary/IHelpSetup_EXECmdLine.htm" rel="noreferrer"><strong>Setup.exe and Update.exe Command-Line Parameters</strong></a></p>
<hr/>
<p>一些MSI文件通过<strong><a href="http://wixtoolset.org/documentation/manual/v3/bundle/" rel="noreferrer">Burn</a></strong>(WiX工具包)或<strong><a href="http://helpnet.installshield.com/installshield18helplib/SteCreatingSuites.htm" rel="noreferrer">InstallShield Suite</a></strong>项目等机制作为<strong>捆绑包的一部分安装。这会使卸载与下面看到的略有不同。这里是<a href="https://stackoverflow.com/a/25374825/129130">an example for InstallShield Suite projects</a></p>
<hr/>
<p><em>请注意,以静默方式运行卸载<strong>或以交互方式运行卸载<strong>可能会导致不同的结果(!)</em>。关于这种情况的详细描述,请阅读以下帖子:<strong><a href="https://stackoverflow.com/questions/29677483/uninstall-from-control-panel-is-different-from-remove-from-msi/29679464#29679464">Uninstall from Control Panel is different from Remove from .msi</a></strong></p>
<hr/>
<p>如果在尝试卸载时意外地要求您提供原始安装介质,请阅读以下回答:<strong><a href="https://stackoverflow.com/questions/208530/why-does-msi-require-the-original-msi-file-to-proceed-with-an-uninstall/1189524#1189524">Why does MSI require the original .msi file to proceed with an uninstall?</a></strong>,或者阅读下面第12节,了解一些重要的技术细节</p>
<hr/>
<p>如果安装了<a href="http://en.wikipedia.org/wiki/CCleaner" rel="noreferrer">CCleaner</a>或类似的清理工具,可以跳到第11节</p>
<hr/>
<p><strong>如果卸载完全失败(无法运行),请参阅第12节&;下面13</strong>,了解使用<a href="http://en.wikipedia.org/wiki/System_Restore" rel="noreferrer"><strong>system restore</strong></a>和/或清理工具“<strong>撤消安装的潜在方法</p>
<hr/>
<h2>1-<strong><code>Using the original MSI</code></strong></h2>
<ul>
<li>如果您有权访问用于安装的原始MSI,只需在Windows资源管理器中右键单击它,然后选择卸载</李>
<li>您也可以通过命令行卸载,如第3节所述</李>
</ul>
<hr/>
<h2>2-<code>Using the old ARP Applet OR new Windows 8/10 Settings Interface</code></h2>
<ul>
<li><p>只是提到了正常的方法,虽然这是显而易见的</p>
</li>
<li><p><strong><code>ARP</code></strong>=<strong><code>Add / Remove Programs Applet</code></strong>(<strong><code>appwiz.cpl</code></strong>)</p>
</li>
<li><p><strong><code>Windows 10 Settings Interface</code></strong>=>;相同操作的新外壳</p>
</li>
<li><p><em><strong>ARP</strong></em>:</p>
<ul>
<li>开始→</kbd><strong>运行</strong><kbd>→</kbd><strong>appwiz.cpl</strong><kbd>→</kbd><kbd>输入</kbd>打开添加/删除程序小程序(或单击控制面板中的添加/删除程序)</li>
<li>单击要卸载的产品的“<strong>删除”</strong></li>
</ul>
</li>
<li><p>设置界面(Windows 8/10):</p>
<ul>
<li>在Windows 8/10中使用新的设置GUI
<ul>
<li><kbd>Windows键</kbd>+点击<kbd>I</kbd>=><strong><code>Apps & Features</code></strong>。选择条目并卸载</李>
</ul>
</li>
<li>直接快捷方式:
<ul>
<li><kbd>Windows键</kbd>+点击<kbd>R</kbd>=>;键入:<code>ms-settings:appsfeatures</code>并按Enter键</li>
</ul>
</li>
<li>以这种方式调用卸载时的一些错误报告。请在下面添加评论,如果看到N
<ul>
<li><a href="https://stackoverflow.com/q/55404271/129130"><strong>Try this answer as well</strong></a></li>
<li><strong>一般提示</strong>:尝试禁用防病毒,然后重试</李>
</ul>
</li>
</ul>
</li>
</ul>
<hr/>
<h2>3-<code>Using msiexec.exe command line (directly or via a batch file)</code></h2>
<ul>
<li>您可以通过<strong>命令提示符</strong>(<strong>cmd.exe</strong>)、<strong>批处理文件</strong>或甚至作为<strong>shell操作从可执行文件中卸载</李>
<li>您可以通过将<strong>产品GUID</strong>(请在下面检查如何查找此<a href="http://en.wikipedia.org/wiki/Globally_unique_identifier" rel="noreferrer">GUID</a>)或原始MSI文件的路径(如果可用)传递到<strong>msiexec.exe</strong></李>
<li>对于下面的所有命令行,您可以将<code>/qn</code>添加到<strong>中,使卸载在静默模式下运行。这是从添加/删除小程序触发卸载时的运行方式</李>
</ul>
<p><strong>选项3.1:基本交互式卸载(访问原始MSI文件):</p>
<pre class="lang-sh prettyprint-override"><code>msiexec.exe /x "c:\filename.msi"
</code></pre>
<p><strong>选项3.2:通过产品GUID进行基本交互式卸载</strong>(无法访问原始MSI文件-<a href="http://robmensching.com/blog/posts/2010/8/2/the-first-thing-i-do-with-an-msi-log/" rel="noreferrer"><strong>here is how to find the product GUID</strong></a>-与下面相同的链接):</p>
<pre class="lang-sh prettyprint-override"><code>msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
</code></pre>
<p><strong>选项3.3:使用详细日志文件进行交互式卸载</strong>:</p>
<pre class="lang-sh prettyprint-override"><code>msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
</code></pre>
<p><strong>选项3.4:使用刷新的详细日志文件进行交互式卸载</strong>(<a href="http://www.installsite.org/pages/en/msifaq/a/1022.htm" rel="noreferrer">verbose, flush to log option</a>-连续写入日志,速度可能非常慢):</p>
<pre class="lang-sh prettyprint-override"><code>msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
</code></pre>
<ul>
<li><p><strong>刷新到日志选项使卸载变慢</strong>,因为日志文件是连续写入的,而不是成批写入的。这样可以确保在安装程序崩溃时不会丢失日志缓冲区</p>
</li>
<li><p>换句话说,<strong>如果安装程序正在崩溃,并且详细日志文件中没有有用的信息,请启用此选项。删除感叹号以关闭“刷新到日志”选项,卸载将更快。您仍然会得到详细的日志记录,但如上所述,一些日志缓冲区可能会丢失</p>
</li>
</ul>
<p><strong>选项3.5(推荐):使用详细日志文件进行静默卸载-禁止重新启动</strong>(不刷新日志-请参阅前面的选项了解其含义):</p>
<pre><code>msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
</code></pre>
<p><em><strong>快速参数解释(因为我推荐此选项):</strong></em></p>
<pre><code>/X = run uninstall sequence
/QN = run completely silently
/L*V "C:\msilog.log"= verbose logging at path specified
{11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
REBOOT=R = prevent unexpected reboot of computer
</code></pre>
<p><em><strong>再次说明,如何查找产品guid:</strong></em>
<a href="https://stackoverflow.com/questions/29937568/how-can-i-find-the-product-guid-of-an-installed-msi-setup/29937569">How can I find the product GUID of an installed MSI setup?</a>(如果您没有在卸载命令中指定的原始MSI,则用于卸载)</p>
<ul>
<li><p><strong>顶部提示</strong>:如果为卸载创建日志文件,则可以通过<a href="http://robmensching.com/blog/posts/2010/8/2/the-first-thing-i-do-with-an-msi-log/" rel="noreferrer"><strong>searching for "value 3"</strong></a>在日志中查找问题。这对于详细文件特别有用,因为它们非常详细:-)</p>
</li>
<li><p><strong>如何查找已安装MSI的产品GUID</strong></p>
<ul>
<li>有几种方法,我推荐使用Powershell:<strong><a href="https://stackoverflow.com/questions/29937568/how-can-i-find-the-product-guid-of-an-installed-msi-setup/29937569">How can I find the product GUID of an installed MSI setup?</a></strong></li>
<li>这里介绍的其他几种方法(注册表、本地缓存文件夹等):<strong><a href="https://stackoverflow.com/questions/11251034/find-guid-from-msi-file/29938049#29938049">Find GUID From MSI File</a></strong></li>
</ul>
</li>
<li><p>有关日志记录的更多信息,请访问<strong>installsite.org</strong>:<a href="http://www.installsite.org/pages/en/msifaq/a/1022.htm" rel="noreferrer"><strong>How do I create a log file of my installation</strong>?</a>-各种选项的详细概述以及InstallShield日志记录的详细信息</p>
</li>
<li><p><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa367988(v=vs.85).aspx" rel="noreferrer"><strong>Msiexec (command-line options)</strong></a>-MSDN</strong>中<strong>msiexec.exe</strong>的命令行概述。这里是<a href="https://technet.microsoft.com/en-us/library/bb490936.aspx" rel="noreferrer"><strong>the Technet version</strong></a></p>
</li>
</ul>
<hr/>
<h2>4-<code>Using the cached MSI database in the super hidden cache folder</code></h2>
<ul>
<li>MSI去掉所有CAB(旧的Windows版本),并将安装在超级隐藏系统文件夹中的每个MSI缓存在<strong>%SystemRoot%\Installer</strong>(您需要显示隐藏文件才能看到它)</李>
<li><strong>NB</strong>:在Windows 7以后的版本中,此超级隐藏文件夹的处理方式有所不同<a href="https://stackoverflow.com/a/1189524/129130">MSI files are now cached full-size</a>。阅读链接线程了解更多详细信息-建议找到此答案并摆弄危险Windows设置的任何人阅读</李>
<li><a href="https://stackoverflow.com/a/5751980/129130">Avoid these huge cached files by using admin installations</a>。关于磁盘空间的主题:<a href="https://serverfault.com/a/642178/20599">How can I get rid of huge cached MSI files (and other disk space cleanup tricks)</a></李>
<li>此处的所有MSI文件都将分配一个随机名称(十六进制格式),但您可以通过显示Windows资源管理器状态栏(查看->;状态栏),然后选择一个MSI来获取有关每个MSI的信息。MSI的摘要流将显示在Windows资源管理器窗口的底部。Or正如Christopher Galpin指出的那样,打开Windows资源管理器中的“注释”列并选择MSI文件(<a href="http://csi-windows.com/blog/all/27-csi-news-general/334-identifying-cached-msi-packages-in-cwindowsinstaller-without-opening-them" rel="noreferrer"><strong>see this article for how to do this</strong></a>)</李>
<li><a href="https://stackoverflow.com/a/41735092/129130">Short answer on using Windows Explorer</a></li>
<li>找到正确的MSI后,只需右键单击它并进行卸载</李>
<li>您还可以使用PowerShell显示本地缓存包的完整路径以及产品名称。在我看来,这是最简单的选择</李>
<li>要启动PowerShell</strong>:<em>按住Windows键,点击R,释放Windows键,键入“PowerShell”,然后按OK</em>。然后<strong>最大化PowerShell窗口<strong>并运行以下命令:</li>
</ul>
<pre class="lang-ps prettyprint-override"><code> get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize
</code></pre>
<p><img src="https://i.stack.imgur.com/HFFF1.png" alt="Enter image description here"/></p>
<ul>
<li>也可以看到这个答案:<a href="https://stackoverflow.com/questions/29937568/how-can-i-find-the-product-guid-of-an-installed-msi-setup/29937569#29937569">How can I find the product GUID of an installed MSI setup?</a></li>
</ul>
<hr/>
<h2>5-<code>Using</code>{a31}</h2>
<ul>
<li><p>有<a href="https://msdn.microsoft.com/en-us/library/aa393941(v=vs.85).aspx" rel="noreferrer"><strong>a similar, but more comprehensive PowerShell script available on MSDN</strong></a>。它允许在多台计算机上运行卸载</p>
</li>
<li><p>由“均匀”添加的条目:</p>
<pre><code> $app = Get-WmiObject -Class Win32_Product -Filter "Name = 'YOUR_APP'"
$app.Uninstall()
</code></pre>
</li>
<li><p>此方法可行,但访问WMI类Win32_产品将触发<strong>软件一致性检查<strong>,该检查非常缓慢<strong>,在特殊情况下,它可能会触发MSI自修复。请参阅本文:<strong><a href="https://stackoverflow.com/questions/17868285/powershell-uninstall-script-have-a-real-headache/17868466#17868466">Powershell Uninstall Script - Have a real headache</a></strong></p>
</li>
<li><p>我自己没有测试过,但是$app.Uninstall()可能会运行在ARP小程序注册表设置中注册的卸载字符串。这意味着在某些情况下,它可能会运行“修改”而不是“卸载”</p>
</li>
<li><p>有关通过Powershell卸载的更多详细信息和方法,请参阅本主题:<strong><a href="https://stackoverflow.com/questions/113542/how-can-i-uninstall-an-application-using-powershell">How can I uninstall an application using PowerShell?</a></strong></p>
</li>
</ul>
<hr/>
<h2>6-<code>Using the .NET DTF Class Library</code>(部分<a href="https://stackoverflow.com/questions/6060281/windows-installer-and-the-creation-of-wix/12101548#12101548">the WiX toolkit</a>)</h2>
<ul>
<li><strong>此选项适用于进入部署和MSI的开发人员</strong>-作为“快速修复”,它并不实用。它要求您下载<a href="http://wixtoolset.org/" rel="noreferrer"><strong>the WiX toolkit</strong></a>——一个用于创建从XML源文件编译的MSI文件的免费框架</李>
<li>关于WiX及其“历史”的简短介绍:<a href="https://stackoverflow.com/questions/6060281/windows-installer-and-the-creation-of-wix/12101548#12101548">Windows Installer and the creation of WiX</a>。和{a38}(优势和劣势——希望尽可能客观)</李>
<li><strong>DTF</strong>(部署工具基础)作为WiX的一部分分发,如下所述:<a href="https://stackoverflow.com/questions/8637300/is-source-code-for-deployment-tools-foundation-available">Is source-code for Deployment Tools Foundation available?</a></李>
<li>DTF本质上是Win32 Windows Installer API的.NET包装器。当通过自动化与Windows Installer一起工作时,它消除了对COM互操作的所有需要,它简直就是一个<strong>.NET jewel</strong>-<em>也许是我见过的最容易使用的.NET库。强烈推荐-即使是在C#</em>中培训学生也很好</李>
<li>以下{a40}来自MSI专家{a41}使用C#和DTF。Microsoft.Deployment.WindowsInstaller是DTF程序集之一<a href="https://serverfault.com/questions/577969/is-it-possible-to-disable-msiexec-help-gui/596519#596519">See the other assemblies explained here on serverfault.com</a>:</li>
</ul>
<pre class="lang-cs prettyprint-override"><code> using Microsoft.Deployment.WindowsInstaller;
public static void Uninstall( string productCode)
{
Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
}
</code></pre>
<ul>
<li>Tom Blodget的另一个选择:<a href="https://stackoverflow.com/questions/17149811/checking-for-successful-uninstall/17175837#17175837">Checking for successful uninstall</a></li>
<li>有关<strong>msiexec.exe</strong>与<strong>自动化</strong>的更多信息,请访问:<a href="https://serverfault.com/questions/577969/is-it-possible-to-disable-msiexec-help-gui/596519#596519"><strong>serverfault.com</strong></a></李>
</ul>
<hr/>
<h2>7-<code>Using the</code>{a45}</h2>
<ul>
<li><p>下面是关于此选项的社区讨论:<a href="http://community.flexerasoftware.com/archive/index.php?t-153737.html" rel="noreferrer">Windows Installer Automation API community sample</a></p>
</li>
<li><p>可以通过<a href="https://serverfault.com/a/596519/20599"><strong>script automation and C++ API calls</strong></a>(我在serverfault.com上的帖子)访问API</p>
</li>
<li><p>以下来源改编自MSI专家<a href="http://blog.deploymentengineering.com/" rel="noreferrer"><strong>Christopher Painter</strong></a>,使用<a href="http://en.wikipedia.org/wiki/VBScript" rel="noreferrer">VBScript</a>:</p>
<pre><code> Set installer = CreateObject("WindowsInstaller.Installer")
installer.InstallProduct "product.msi", "REMOVE=ALL REBOOT=ReallySuppress"
Set installer = Nothing
</code></pre>
</li>
<li><p>下面是另一个用于按GUID从Symantec卸载的VBScript:<a href="http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry" rel="noreferrer">http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry</a></p>
</li>
<li><p><a href="https://stackoverflow.com/a/49077469/129130"><strong>Uninstall via upgrade code & ConfigureProduct</strong></a></p>
</li>
</ul>
<hr/>
<h2>8-<code>Using a</code>{a52}</h2>
<ul>
<li>Windows Installer主要升级可能是安装另一个MSI文件的一部分</李>
<li>主要的升级是通过在MSI的“<strong><a href="https://msdn.microsoft.com/en-us/library/aa372374%28v=vs.85%29.aspx" rel="noreferrer">Upgrade table</a></strong>中识别相关产品来编写的。然后按照表中的规定处理这些相关设置。通常,这意味着它们将被卸载,但主安装程序也可以被中止(通常用于检测机箱中存在的您自己的应用程序的更高版本)</李>
</ul>
<hr/>
<h2>9-<code>Using Deployment Systems / Remote Administration Systems</code></h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/System_Center_Configuration_Manager" rel="noreferrer">SCCM</a>、<a href="http://en.wikipedia.org/wiki/CA_Unicenter" rel="noreferrer">CA Unicenter</a>、<a href="http://en.wikipedia.org/wiki/Tivoli_Management_Framework" rel="noreferrer">IBM's Tivoli</a>、<a href="http://en.wikipedia.org/wiki/Altiris" rel="noreferrer">Altiris</a>客户端管理套件和其他几个</li>
<li>这些工具具有高级客户端PC管理功能,其中包括安装和卸载MSI文件</li>
<li>这些工具似乎使用了组合msiexec.exe的自动化、自动化、自动化等。。。甚至他们自己调用安装和卸载的方式</李>
<li>根据我的经验,这些工具具有很多“个性”,你需要适应它们不同的做事方式</李>
</ul>
<hr/>
<h2>10-<code>Using WMI - Windows Management Instrumentation</code></h2>
<ul>
<li>添加只是为了完整性。不建议使用此方法,因为它非常缓慢
<ul>
<li>每次调用每个安装的Win32_产品时,都会触发软件一致性检查</li>
<li>一致性检查的速度非常慢</strong>,它还可能触发软件修复</strong>。请参阅本文:<strong><a href="https://stackoverflow.com/questions/17868285/powershell-uninstall-script-have-a-real-headache/17868466#17868466">Powershell Uninstall Script - Have a real headache</a></strong></li>
<li>更糟糕的是,<a href="https://serverfault.com/questions/43067/what-could-be-causing-msiinstaller-to-continuously-reconfigure-applicationseven">some people report their event logs filling up with MsiInstaller EventID 1035 entries</a>-显然是由对Win32_产品类的WMI查询引起的(我个人从未见过这种情况)</李>
</ul>
</li>
<li><strong><a href="http://www.microsoft.com/en-us/download/details.aspx?id=8572" rel="noreferrer">WMICodeCreator.exe</a></strong>代码创建工具可用于实验
<ul>
<li>可以通过<code>Win32_Product.Install</code>调用Install</li>
<li>可以通过<code>Win32_Product.Uninstall</code>调用卸载</li>
</ul>
</li>
<li>MSDN示例:<a href="https://msdn.microsoft.com/en-us/library/aa393941(v=vs.85).aspx" rel="noreferrer">Uninstall method of the Win32_Product class</a></li>
</ul>
<hr/>
<h2>11-<code>Using a third-party tool such as</code>{a63}{<cd25>}</h2>
<ul>
<li>一些Windows应用程序具有自己的界面,不仅可以卸载MSI软件包,还可以卸载旧版安装程序</李>
<li>我不想在这里提出任何具体的工具建议(特别是商业建议),但众所周知的<a href="https://www.piriform.com/CCLEANER" rel="noreferrer">CCleaner</a>具有这样一个卸载界面(并且它有一个免费版本)。我还要补充一点<a href="https://www.pcworld.com/article/3225407/security/ccleaner-downloads-infected-malware.html" rel="noreferrer"><strong>this tool suffered a malware attack recently</strong></a></李>
<li>我想我们都应该记住,即使是无害的软件也可以在下载位置注入恶意软件(FTP攻击)。
<ul>
<li>我使用<a href="https://www.virustotal.com" rel="noreferrer"><strong>virustotal.com</strong></a>检查我的下载,也使用<a href="https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer" rel="noreferrer">Sysinternals Process Explorer</a>检查安装后运行的进程,以及常规安全软件(以可用的为准)</李>
<li>这种方法通常会发现数量惊人的“灰色区域”软件(工具栏、笑脸、广告软件等),以及一些误报(它们也会导致问题,因为安全软件会阻止它们的访问或隔离它们,造成很多模糊)。当然还有真正的恶意软件</李>
<li><a href="https://twitter.com/glytzhkof/status/943103096569454592" rel="noreferrer">Some usage tips for Process Explorer can be found here</a>-一系列tweet-此Process Explorer工具连接到<a href="https://www.virustotal.com" rel="noreferrer">VirusTotal.com</a>以交互方式检查所有正在运行的进程-您只需要几个配置步骤</李>
<li>我应该注意到Process Explorer生成了一个文件签名检查,但没有启发式方法——据我所知(没有检查可疑操作,只是对标记文件使用60多个安全套件进行检查)。您需要一个常规的安全工具来进行交互式在线启发式保护</李>
<li>值得一提的是,我认为一些安全软件几乎会造成比恶意软件更严重的误报问题。赎金时代著名的遗言</李>
<li>这是一个足够大的离题——我只是不想看到人们下载恶意软件。至少进行<a href="https://www.virustotal.com" rel="noreferrer">virustotal.com</a>检查</李>
</ul>
</li>
<li>像这样卸载应该可以。我认为当你尝试它们的“清理功能”时,这些工具会弄乱太多东西。小心使用。如果您只使用卸载功能,您应该可以</李>
</ul>
<hr/>
<h2>12-{<cd26>}<del>{<cd27>}</del>{<cd25>}</h2>
<ul>
<li>为完整起见,应提及<del>msizap.exe</del>,尽管它已<strong>弃用</strong>,<strong>不受支持</strong>和<strong>过时</strong>。不应在任何较新的Windows版本上使用它</li>
<li>这个命令行工具(<del>msizap.exe</del>)也有一个GUI可用(<del>msicu2.exe</del>)。这两种工具都不受欢迎</李>
<li>这些工具的预期用途是清除失败的卸载:</li>
<li>通常情况下,<strong>带有随机名称的缓存MSI错误地丢失,并且请求原始MSI时卸载失败。这是一个罕见的问题,但我自己也看到了。只有几个潜在原因:<a href="https://stackoverflow.com/a/50478416/129130"><strong>Moved to this answer</strong></a>。
<ul>
<li>关键词:系统恢复干扰,b广告清理应用程序、msiexec.exe崩溃、断电、安全软件干扰、MSI开发调试错误(相同的软件包代码等)、用户修补和黑客攻击(这里是什么?节省空间?)等等</李>
<li>它也可以用来摧毁任何MSI安装,尽管这显然是不可取的</李>
<li>更多信息:<a href="https://stackoverflow.com/questions/208530/why-does-msi-require-the-original-msi-file-to-proceed-with-an-uninstall/1189524#1189524">Why does MSI require the original .msi file to proceed with an uninstall?</a></li>
</ul>
</li>
<li><del><a href="http://support2.microsoft.com/default.aspx?scid=kb;en-us;290301" rel="noreferrer">This newer support tool</a></del>(此工具现在也不推荐使用)可以在最新的Windows版本上尝试,如果您有需要卸载的已失效MSI包</李>
<li>一些人建议使用saschabeaumont链接到此处的工具:<strong><a href="https://stackoverflow.com/questions/334490/uninstall-without-an-msi-file/11058378#11058378">Uninstall without an MSI file</a></strong>。如果你尝试了它,它的工作,请务必让我们知道</李>
<li>如果您有权访问实际用于安装产品的原始MSI,则可以使用它来运行卸载。它必须是使用的确切MSI,而不仅仅是类似的MSI</李>
</ul>
<hr/>
<h2>13-<code>Using</code>{a75}{<cd31>}</h2>
<ul>
<li>严格来说,这不是一种“卸载”<strong>的方法,而是一种“撤消”<strong>上次安装或多次安装的方法</李>
<li>通过还原点进行还原会使系统恢复到以前的安装状态(您可以在YouTube或类似网站上找到此功能的视频演示)</李>
<li>请注意,该功能可以全部或部分禁用-可以对整个机器永久禁用,也可以每次安装临时禁用</李>
<li><em>我见过系统还原导致的新的无法解决的安装问题,但正常情况下,它工作正常</em>。显然,不要为了好玩而使用该功能。这是最后的手段,最好用于<strong>回滚新的驱动程序</strong>或刚安装的设置,发现这些设置会立即导致问题(<a href="http://en.wikipedia.org/wiki/Blue_Screen_of_Death" rel="noreferrer">bluescreen</a>、重新启动、不稳定等)</李>
<li>你回去的时间越长,你为自己创造的返工越多,风险也就越高。大多数系统只有几个恢复点,我相信大多数恢复点可以追溯到一两个月前</李>
<li>请注意,系统还原可能会影响随后必须重新应用的Windows更新以及许多其他系统设置。除了纯粹的烦恼之外,这还可能导致安全问题再次出现,您可能希望使用<a href="http://en.wikipedia.org/wiki/Microsoft_Baseline_Security_Analyzer" rel="noreferrer"><strong>Microsoft Baseline Security Analyzer</strong></a>或类似工具对目标框运行特定的安全检查</李>
<li>既然我提到了系统恢复,我想我应该提到<a href="http://support.microsoft.com/kb/307852" rel="noreferrer"><strong>the Last Known Good Configuration feature</strong></a>。此功能与卸载或系统还原无关,但它是最后一次启动配置,起作用或导致系统运行。如果系统在引导过程中出现蓝屏或停止,可以使用它使系统重新运行。这通常发生在驱动程序安装之后</李>
</ul>
<hr/>
<h2>14-<code>Windows Installer Functions (C++)</code></h2>
<p>为了完整性,我想我们应该提到它的核心——从金属到金属的方式:<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa369426(v=vs.85).aspx" rel="noreferrer">the Win32 Windows Installer API functions</a>。这些功能可能是大多数(如果不是以上列出的所有其他方法的话)“发动机罩下”所使用的功能。它们主要用于将MSI作为一种技术直接处理的应用程序或解决方案</p>
<p>serverfault.com上有一个答案,它可能与<a href="https://serverfault.com/questions/577969/is-it-possible-to-disable-msiexec-help-gui/596519#596519">a summary of the different programmatic approaches for uninstalling</a>(com自动化、.NET、Win32安装程序函数)有关</p>
<P>下面将找到一个C++代码片段,它展示了如何使用对<a href="http://helpnet.installshield.com/installshield18helplib/SteCreatingSuites.htm" rel="noreferrer">InstallShield Suite</a>的调用,通过产品代码卸载^ {< CD33 > }。要卸载另一个产品,请将为<code>prodcode</code>指定的GUID替换为您产品的GUID。要查找产品代码,请参见以下答案:<a href="https://stackoverflow.com/questions/29937568/how-can-i-find-the-product-guid-of-an-installed-msi-setup/29937569#29937569">How can I find the product GUID of an installed MSI setup?</a></p>
<p>卸载将在完全GUI模式下进行。要在静默模式或其他GUI模式(精简、基本等)下运行,请参阅:<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa370389%28v=vs.85%29.aspx" rel="noreferrer">MsiSetInternalUI function</a></p>
<pre class="lang-cpp prettyprint-override"><code>#include "pch.h"
#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h>
#pragma comment(lib, "msi.lib") // To make code link
int main()
{
const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12
UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);
return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
}
</code></pre>
<p>截至2018年9月,使用最新版本的Visual Studio 2017制作并测试了该片段:</p>
<ol>
< L> > P>从Visual C++ +Gt中创建一个新的“Windows控制台应用程序”;Windows桌面</p>
</li>
<li><p>将上述代码复制并粘贴到您的主CPP文件中(替换其中的任何内容)</p>
</li>
<li><p>那应该能够运行代码。可能设置一个断点,构建并运行</p>
<ul>
<li><del>注意VS2017中默认模板的更改,以及可能导致的奇怪错误:<a href="https://stackoverflow.com/questions/48129786/there-are-too-many-errors-for-the-intellisense-engine-to-function-correctly">There are too many errors for the IntelliSense engine to function correctly</a>。</del></li>
<li><strong>2018年9月更新</strong>:模板再次更改。我不再看到上述问题</李>
<li>代码中的MSDN链接列出了从msiexec.exe返回的可能错误消息</李>
</ul>
</li>
</ol>