msiexec 是命令提示符软件,安装 MSI 程序。但我发现您只需在命令行中输入 MSI 文件的名称即可从命令行安装 MSI 文件。

但为了卸载 MSI 文件,似乎你必须调用 msiexec 程序并给它一个 /x 或者 /uninstall.

如何从命令行卸载 MSI,而不使用 msiexec 常规?

有帮助吗?

解决方案

简短的回答:你不能。使用MSIEXEC / X

龙答:当您运行MSI直接在命令行文件,所有发生的事情是,它运行MSIEXEC你。这种关联被存储在注册表中。你可以看到关联的列表(在Windows资源管理器)将工具/文件夹选项/文件类型。

例如,可以运行在命令行一个.DOC文件,写字板或WINWORD将其打开。

如果你下HKEY_CLASSES_ROOT\.msi注册表看,你会看到.MSI文件与程序id“Msi.Package”相关联。如果您在HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command看,你会看到命令行视窗实际使用时,您在“运行”一个.MSI文件。

其他提示

卸载 MSI 软件包的方法有多种。这旨在作为“参考”。

总之 您可以通过以下方式卸载: 微星执行程序, ARP, WMI, 电源外壳, 、部署系统如 SCCM, VB脚本 / COM 自动化, 数据传输格式, ,或通过 隐藏的 Windows 缓存文件夹, ,以及下面介绍的一些其他选项。

前几段提供了重要的 MSI 花絮,然后是 14节 使用不同的方式卸载 MSI 文件。噗。

“喋喋不休,喋喋不休——结束”: 部分 1, 23正常卸载方法 (因此推荐)。 Personally I use option 3 or 5 from section 3 (两种记录的选项,但选项5也默默运行)。如果你是 很忙, 跳过所有的喋喋不休,选择一个 就能完成工作。


如果你有 完全卸载时出现问题 并正在寻找已弃用的替代方案 MSIZap.exe 和/或 Windows Installer 清理实用程序 (MSICUU2.exe),你可以尝试新的 Microsoft 的 FixIt 工具 (或国际页面)。显然也可以解决其他安装问题。


如果你认为 MSIWindows安装程序 麻烦多于其价值,您可能想阅读 使用 MSI 文件的企业优势.


安装脚本 MSI 设置通常包含在 安装程序.exe 文件. 。要了解有关用于卸载此类设置的参数的更多信息,请参阅以下链接: setup.exe pdf 参考表, Setup.exe 和 Update.exe 命令行参数.


一些 MSI 文件作为 捆绑 通过诸如 烧伤 (WiX 工具包)或 安装盾套件 项目。这可能会使卸载与下面看到的略有不同。这是 InstallShield Suite 项目示例.


请注意,运行卸载 默默 或者 交互地 可能会导致不同的结果(!). 。有关为什么会出现这种情况的相当长的描述,请阅读这篇文章: 从控制面板卸载与从 .msi 删除不同


如果您在尝试卸载时意外地被要求提供原始安装介质,请阅读以下答案: 为什么 MSI 需要原始 .msi 文件才能继续卸载? 也许还可以在下面的第 12 节中了解一些重要的技术细节。


如果你有 CC清理器 或安装类似的清理工具,也许跳转到 第11条.


如果卸载完全失败(无法运行),请参阅下面的第 12 和 13 节 寻找一种潜在的方法“撤消“安装使用 系统还原 和/或清理工具。


1. Using the original MSI

  • 如果您有权访问用于安装的原始 MSI,您可以简单地 右键点击 它在 Windows资源管理器 并选择 卸载.
  • 您还可以按照第 3 节中的说明通过命令行卸载。

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:

    • 开始 跑步 appwiz.cpl 进入 为了打开添加/删除程序小程序(或单击控制面板中的添加/删除程序)
    • 点击 ”消除“对于您要卸载的产品
  • 设置界面 (Windows 8 / 10):

    • 在 Windows 8 / 10 中使用新的设置 GUI
    • Windows 键 + 点击 => Apps & Features. 。选择条目并卸载。
    • 以这种方式调用卸载时出现一些错误报告。如果看到请在下面添加评论。

3. Using msiexec.exe command line (directly or via a batch file)

  • 您可以通过卸载 命令提示符 (执行程序), 批处理文件 或者甚至从可执行文件中作为 外壳操作.
  • 您可以通过传递 产品GUID (检查下面如何找到这个 GUID) 或原始 MSI 文件的路径(如果有) 微星执行程序.
  • 对于下面的所有命令行,您可以添加 /qn使卸载以静默模式运行. 。这就是从添加/删除小程序触发时卸载运行的方式。

    • 选项1:基本交互式卸载 (访问原始MSI文件):

       msiexec.exe /x "c:\filename.msi"
      
    • 选项2:通过产品 GUID 进行基本交互式卸载 (无法访问原始 MSI 文件 - 以下是如何查找产品 GUID - 与下面相同的链接):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • 选项 3:使用详细日志文件进行交互式卸载:

       msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
      
    • 选项 4:使用刷新的详细日志文件进行交互式卸载 (详细、刷新到日志选项 - 连续写入日志,可能会很慢):

       msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
      
      • 刷新到日志选项使卸载速度变慢 因为日志文件是连续写入的,而不是批量写入的。这可以确保在安装崩溃时日志缓冲区不会丢失。

      • 换句话说, 如果您的设置崩溃并且详细日志文件中没有有用的信息,请启用此选项. 。删除感叹号以关闭刷新到日志选项,卸载会更快。您仍然可以获得详细的日志记录,但如上所述,某些日志缓冲区可能会丢失。

    • 选项 5(推荐):使用详细日志文件静默卸载 - 抑制重新启动 (不刷新日志 - 请参阅前面的选项以了解这意味着什么):

       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
      

      快速参数解释(因为我推荐这个选项):

       /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
      

      再次说明如何查找产品指南:如何找到已安装的 MSI 设置的产品 G​​UID? (如果您没有在卸载命令中指定的原始 MSI,则用于卸载)。

  • 顶部提示:如果您为卸载创建日志文件,则可以通过以下方式在日志中查找问题 搜索“值 3”. 。这对于详细文件特别有用,因为它们非常详细:-)。

  • 如何查找已安装 MSI 的产品 G​​UID?

  • 有关登录的更多信息 安装站点.org: 如何创建安装日志文件? - 不同选项的精彩概述以及 InstallShield 日志记录的细节。

  • Msiexec(命令行选项) - 命令行概述 微星执行程序微软软件定义网络. 。这是 技术网版本.

4. Using the cached MSI database in the super hidden cache folder

  • MSI 删除所有 cab(较旧的 Windows 版本)并将安装在超级隐藏系统文件夹中的每个 MSI 缓存在 %SystemRoot%\安装程序 (您需要显示隐藏文件才能看到它)。
  • 注意:现在,从 Windows 7 开始,这个超级隐藏文件夹的处理方式有所不同。 MSI 文件现在以全尺寸缓存. 。阅读链接的线程以获取更多详细信息 - 建议任何找到此答案并摆弄危险 Windows 设置的人阅读。
  • 此处的所有 MSI 文件都将分配一个随机名称(十六进制格式),但您可以通过显示 Windows 资源管理器状态栏(查看 -> 状态栏)然后选择 MSI 来获取有关每个 MSI 的信息。来自 MSI 的摘要流将显示在 Windows 资源管理器窗口的底部。或者正如 Christopher Galpin 指出的那样,打开 Windows 资源管理器中的“注释”列并选择 MSI 文件(请参阅这篇文章了解如何执行此操作).
  • 找到正确的 MSI 后,只需右键单击它并转到“卸载”。
  • 您还可以使用 PowerShell 显示本地缓存的包的完整路径以及产品名称。我认为这是最简单的选择。
  • 点火 电源外壳: 按住 Windows 键,点击 R,松开 Windows 键,输入“powershell”,然后按“确定”. 。然后 最大化 PowerShell 窗口 并运行以下命令:
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. Using PowerShell

  • MSDN 上提供了类似但更全面的 PowerShell 脚本. 。它允许在多台计算机上运行卸载。
  • Even Mien 添加的条目:

    $app = Get-WmiObject -Class Win32_Product -Filter "Name = 'YOUR_APP'"
    $app.Uninstall()
    
  • 这种方法可行,但访问 WMI 类 Win32_Product 将触发 软件一致性检查 这是 非常慢 特殊情况下可能会触发MSI自修复。参见这篇文章: Powershell卸载脚本——真让人头疼

  • 我自己没有对此进行测试,但看来 $app.Uninstall() 可能会运行在 ARP 小程序的注册表设置中注册的 UninstallString。这意味着在某些情况下它可能会运行修改而不是卸载。
  • 检查此主题以获取更多详细信息以及通过 Powershell 卸载的方法: 如何使用 PowerShell 卸载应用程序?

6. Using the .NET DTF Class Library (部分 WiX 工具包)

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. Using the Windows Installer Automation API


8. Using a Windows Installer major upgrade

  • Windows Installer 主要升级可能作为另一个 MSI 文件安装的一部分进行。
  • 通过识别 MSI 中的相关产品来进行重大升级”升级表”。然后按照表中的指定处理这些相关设置。通常,这意味着它们已被卸载,但也可以中止主安装(通常用于检测包装盒上存在的您自己的应用程序的更高版本)。

9. Using Deployment Systems / Remote Administration Systems

  • SCCM, 加州Unicenter, IBM 的蒂沃利, 阿尔蒂里斯 客户管理套件和其他几个
  • 这些工具具有高级客户端 PC 管理功能,其中包括 MSI 文件的安装和卸载
  • 这些工具似乎结合使用了 msiexec.exe、自动化、 WMI, , ETC...甚至他们自己的调用安装和卸载的方式。
  • 根据我的经验,这些工具具有很多“个性”,您需要适应它们不同的做事方式。

10. Using WMI - Windows Management Instrumentation


11. Using a third-party tool such as ccleaner or similar

  • 一些 Windows 应用程序具有自己的界面,不仅可以卸载 MSI 软件包,还可以卸载旧版安装程序。
  • 我不想在这里提出任何具体的工具推荐(尤其是商业工具),但是众所周知的 CC清理器 具有这样的卸载界面(并且它有免费版本)。我还应该补充一点 该工具最近遭受了恶意软件攻击.
  • 我想我们都应该记住,即使是无害的软件也可能在其下载位置注入恶意软件(FTP 攻击)。
    • 我用 virustotal.com 检查我的下载,以及 Sysinternals 进程浏览器 安装后检查正在运行的进程 - 以及常规安全软件(以可用者为准)。
    • 通过这种方法通常会发现数量惊人的“灰色区域”软件(工具栏、表情符号、广告软件等),以及一些误报(它们也可能导致问题,因为安全软件会阻止其访问或隔离它们,从而导致很多毛茸茸的)。当然还有真正的恶意软件。
    • Process Explorer 的一些使用技巧可以在这里找到 - 一系列推文 - 这个 Process Explorer 工具连接到 VirusTotal.com 以交互方式检查所有正在运行的进程 - 您所需要的只是一些配置步骤。
    • 我应该注意到,Process Explorer 会进行文件签名检查,但不会进行启发式检查 - 据我所知(不会检查可疑操作,只是检查 60 多个标记文件的安全套件)。您需要一个常规安全工具来进行交互式在线启发式保护。
    • 无论如何,我认为某些安全软件造成的误报问题比恶意软件造成的损害还要多。勒索软件时代著名的遗言......
    • 这是一个足够大的题外话——我只是不想看到人们下载恶意软件。做你的 virustotal.com 至少检查一下。
  • 像这样卸载应该可以正常工作。我认为当你尝试这些工具的“清理功能”时,它们会弄乱太多的东西。谨慎使用。如果您只使用卸载功能,应该没问题。

12. Using a cleanup tool such as msizap or similar

  • 为了完整性 msizap.exe 应该提到的是 已弃用, 不支持的过时的. 。它不应该在任何较新的 Windows 版本上使用
  • 这个命令行工具(msizap.exe)还有一个可用的 GUI(MSICUU2.exe)。这两种工具均已弃用。
  • 这些工具的预期用途是 清除失败的卸载:
  • 通常对于罕见的情况 带有随机名称的缓存 MSI 被错误地丢失 由于这个原因,在要求原始 MSI 时卸载失败。这是一个罕见的问题,但我自己也见过。只是一些潜在的原因: 转移到这个答案.
    • 关键词:系统恢复干扰、不良清理应用程序、msiexec.exe 崩溃、断电、安全软件干扰、MSI 开发调试错误(相同的包代码等...)、用户修补和黑客攻击(这里有什么?节省空间?)等...
    • 它也可以用来破坏任何 MSI 安装,尽管这显然是不可取的。
    • 更多信息: 为什么 MSI 需要原始 .msi 文件才能继续卸载?
  • 这个较新的支持工具 (此工具现在也已弃用)如果您有需要卸载的失效 MSI 软件包,可以在最新的 Windows 版本上尝试。
  • 有些人建议使用 saschabeaumont 链接到此处的工具: 无需 MSI 文件即可卸载. 。如果您尝试过并且有效,请务必告诉我们。
  • 如果您有权访问实际用于安装产品的原始 MSI,则可以使用它来运行卸载。它必须是所使用的确切 MSI,而不仅仅是类似的 MSI。

13. Using system restore ("installation undo" - last resort IMHO)

  • 严格来说,这不是“卸载“但是到”撤消“最后一次安装,或多次安装。
  • 通过还原点还原使系统恢复到原来的状态 之前的安装状态 (您可以在 YouTube 或类似网站上找到此视频演示)。
  • 请注意,该功能可以完全或部分禁用 - 可以对整台计算机永久禁用,也可以在每次安装时临时禁用。
  • 我遇到过因系统还原而导致的新的、无法解决的安装问题,但通常可以正常工作. 。显然,不要使用该功能来娱乐。这是最后的手段,最适合用于 回滚新驱动程序 或刚刚安装并被发现会立即导致问题的设置(蓝屏幕, 、重新启动、不稳定等...)。
  • 你回去的时间越长,你给自己带来的返工就越多,风险也就越高。大多数系统仅具有几个恢复点,而且我相信其中大多数只能回溯一两个月。
  • 请注意,系统还原可能会影响 Windows 更新 然后必须重新应用该设置以及许多其他系统设置。除了纯粹的烦恼之外,这还可能导致安全问题重新出现,您可能需要使用以下命令对目标框运行特定的安全检查 微软基线安全分析器 或类似的工具。
  • 既然我提到了系统恢复,我想我应该提到 最后一次的正确配置功能. 。此功能与卸载或系统还原无关,但它是最后一次有效或导致系统运行的启动配置。如果系统在启动过程中蓝屏或停止,它可用于使系统重新运行。这通常发生在驱动程序安装后。

14. Windows Installer Functions (C++)

为了完整起见,我想我们应该提到这一切的核心 - 脚踏实地的方式: Win32 Windows Installer API 函数. 。这些可能是大多数(如果不是所有)上面列出的“幕后”其他方法使用的功能。它们主要由直接将 MSI 作为技术处理的应用程序或解决方案使用。

serverfault.com 上有一个答案,您可能会感兴趣 不同编程卸载方法的总结 (COM 自动化、.NET、Win32 安装程序功能)。

下面您将找到一个显示如何卸载的 C++ 代码片段 Orca, 10.1.17134.12 通过产品代码使用调用 MsiConfigureProductEx 函数. 。要卸载其他产品,请替换指定的 GUID prodcode 与您的产品相匹配的产品。要查找产品代码,请参阅此答案: 如何找到已安装的 MSI 设置的产品 G​​UID?

卸载将以完整 GUI 模式进行。要在静默模式或其他 GUI 模式(简化模式、基本模式等)下运行,请参阅: MsiSetInternalUI函数.

#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
}

该片段是使用最新版本制作并测试的 视觉工作室 2017 截至 2018 年 9 月:

  1. 从 Visual C++ => Windows 桌面创建一个新的“Windows 控制台应用程序”。
  2. 将上述代码复制并粘贴到主 CPP 文件中(替换其中的任何内容)。
  3. 这样就可以运行代码了。也许设置一个断点,构建并运行。

    • 请注意 VS2017 中默认模板的更改,以及可能导致的奇怪错误: IntelliSense 引擎存在太多错误,无法正常运行.
    • 2018 年 9 月更新:模板又变了。我不再看到上述问题。
    • 代码中的 MSDN 链接列出了从 msiexec.exe 返回的可能错误消息。

还记得的卸载可以使用WMIC命令来启动:

wmic product get name - >这将列出所有已安装的应用程序的名称

wmic product where name='myappsname' call uninstall - >这将卸载的应用

msi文件扩展名被映射到MSIEXEC(相同的方式上的命令提示输入一个.txt文件名启动记事本/默认.txt文件处理程序,以显示文件)。

因此,在一个文件名与.msi扩展名键入真正运行与MSI文件作为参数MSIEXEC并采取默认动作,安装。出于这个原因,卸载需要你调用MSIEXEC与卸载开关到解除停止它。

wmic product get name

就卡住了CMD ......仍然闪烁_几分钟后

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,如果你能找到你要安装(而不是一个与产品代码命名)软件名称的文件夹中,UninstallString点到应用程序本身的卸载程序C:\Program Files\Zune\ZuneSetup.exe /x

我想尝试下面的语法 - 它为我的作品

msiexec /x filename.msi /q 

我假设当你int类型文件.msi进入命令行模式时,Windows会自动要求你MSIEXEC文件.msi。我假设这是因为,当你在picture.png键入它带来了默认的图片浏览器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top