Powershell 静默卸载 "Microsoft Report Viewer Runtime 2012"

Powershell Silent Uninstall "Microsoft Report Viewer Runtime 2012"

我已经尝试了很多 common approaches(MSI、PowerShell)来静默卸载以下应用程序:

微星

$ReportViewer2012 = Get-WmiObject -Class Win32_Product -Filter "Name = 'Microsoft Report Viewer 2012 Runtime'" | Select-Object -Expand IdentifyingNumber 
if ($ReportViewer2012)
{
    echo "Unistalling: Microsoft Report Viewer 2012 Runtime"
    msiexec /passive /x $ReportViewer2012 | Out-Null
}

Powershell

(Get-WMIObject Win32_Product -Filter 'name="Microsoft Report Viewer 2012 Runtime"').Uninstall()

没有任何效果,但是我确实得到了输出的详细日志(/L*V):

MSI (s) (20:84) [14:42:57:903]: SOURCEMGMT: Source is invalid due to missing/inaccessible package.

MSI (s) (20:84) [14:42:57:903]: Note: 1: 1706 2: -2147483647 3: ReportViewer.msi

MSI (s) (20:84) [14:42:57:903]: SOURCEMGMT: Processing URL source list.

MSI (s) (20:84) [14:42:57:903]: Note: 1: 1402 2: UNKNOWN\URL 3: 2

MSI (s) (20:84) [14:42:57:903]: Note: 1: 1706 2: -2147483647 3: ReportViewer.msi

MSI (s) (20:84) [14:42:57:903]: Note: 1: 1706 2: 3: ReportViewer.msi

MSI (s) (20:84) [14:42:57:903]: SOURCEMGMT: Failed to resolve source

MSI (s) (20:84) [14:42:57:903]: MainEngineThread is returning 1612

MSI (s) (20:5C) [14:42:57:904]: User policy value 'DisableRollback' is 0

MSI (s) (20:5C) [14:42:57:904]: Machine policy value 'DisableRollback' is 0

MSI (s) (20:5C) [14:42:57:904]: Incrementing counter to disable shutdown. Counter after increment: 0

MSI (s) (20:5C) [14:42:57:905]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2

MSI (s) (20:5C) [14:42:57:905]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2

MSI (s) (20:5C) [14:42:57:905]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied. Counter after decrement: -1

MSI (c) (E8:EC) [14:42:57:906]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied. Counter after decrement: -1

MSI (c) (E8:EC) [14:42:57:906]: MainEngineThread is returning 1612

这个主题是discussed here但没有结论。我想知道是什么导致了这个问题以及如何解决它?

当我尝试卸载 UI 中的软件包时,似乎也抑制了静默卸载错误,我看到一个对话框,要求我找到 MSI 文件应用程序。不确定它是如何变成这样的,但我通过重新下载软件包并从 there 卸载它来修复它。不必为了卸载应用程序而将 MSI 与我的 powershell 脚本打包在一起会很好,但现在我没有更好的解决方案。

缺少/无法访问源

很明显,Windows 安装程序要求已安装产品的安装源以允许卸载是不正常的行为。

Quick Fix? Maybe look under "Uninstall MSI" below for the Microsoft Install / Uninstall Tool which you can use to try to resolve the situation with your un-uninstallable MSI package in a quick, automatic and - I believe - reliable fashion.

UPDATED: Microsoft 工具,应该可以解决您的问题。这个答案的其余部分是本着“让我们着迷于此”的精神写的:-) 并试图解释潜在的原因以及其他一些修复。

另请参阅下文,了解如何详细调试日志记录 以收集更多"intel" 用于您的特定卸载/安装问题(可以查明 MSI 中的确切罪魁祸首- 例如特定的自定义操作)。

您的问题可能的潜在原因是:

  1. 缺少缓存 MSI:在初始安装期间应该在受保护的系统文件夹中创建的缓存 MSI 丢失了 -因为某些原因。详细说明如下。
  2. 缺少源资源:也可能是卸载过程需要磁盘上缺少的资源并阻止卸载运行。
    • 然后卸载过程将尝试解析原始安装媒体的源以获取所需的资源(二进制文件?),但随后失败,因为原始源 MSI 已被删除已删除,无处可寻。
    • 这一般表示微星设计有问题。卸载中断,您陷入困境 22(无法卸载,无法升级)。请参阅下面链接的 Microsoft 工具,了解解决此问题的可能方法。
    • 如果 MSI 设计问题确实是原因(并且确实如此),您必须尝试与供应商合作,为他们的软件包提供可靠的、未来的修复——否则它显然会影响您自己产品的成功和可靠性。不用说我猜。​​
  3. 其他原因:下面列出了一些其他潜在的外部原因,范围为 anti-virus blockingdisk space issuesuser / admin tinkeringsystem restore、等等...

以下日志条目让我怀疑 一个 anti-virus 阻塞问题,但是很可能需要原始源解析的缺失资源:

SOURCEMGMT: Source is invalid due to missing/inaccessible package.

由于 anti-virus 似乎没有阻止您从 运行 下载的完整 MSI,我相信问题是 MSI 试图错误地丢失资源在卸载期间从源媒体解析和检索。 可能是 MSI 设计问题 - 明天会检查更多。

完整、详细、调试日志记录 可能会提供更多线索:

下面的文字是在决定提出上述三个主要候选原因之前写的。留下内容供参考。


卸载 MSI

Microsoft Install / Uninstall Tool: there is a tool from Microsoft available for the case where unresolvable install / uninstall problems occur: Fix problems that block programs from being installed or removed.

卸载现有安装的正常方法通常是 如下 - 带有详细日志记录的静默卸载:

msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress

快速参数说明:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
/QN = run completely silently
/L*V "C:\My.log"= verbose logging at specified path
REBOOT=ReallySuppress = avoid unexpected, sudden reboot

你已经有 the list of other uninstall approaches(我最喜欢的是第 3 部分)。

我不擅长 Powershell,但这里是之前关于使用它安装/卸载产品的回答: Maybe check that new Windows Installer PowerShell Module linked 至顶部。


潜在的源提示原因

以下在the answer you link to above (section 12)中有部分解释,但我会在这里结合上下文:

  • 缓存 MSI:Windows 安装程序在原始安装期间将 MSI 文件缓存在 %SystemRoot%\Installer 中。此文件夹是 super-hidden,您可能需要显示操作系统文件才能在 Windows 资源管理器中看到它。 Windows 键 + R + 粘贴 %SystemRoot%\Installer + 点击 ENTER。在搜索您的 MSI 之前阅读下一个要点。
  • Ranom, Hex Name:这个缓存的 MSI 被分配了一个随机的十六进制名称并且在维护和卸载操作期间使用,对于任何此类操作,无需指向用于安装的原始源 MSI。 More details on this caching(Microsoft 不断更改此缓存的工作方式)。 无论您做什么,都不要在此 OS 文件夹中进行任何更改!
    • 要找到您的 MSI,请将光标悬停在随机的 MSI 名称上,然后 黄色 pop-up 应该会告诉您 MSI 适用的产品。重复直到找到您的 MSI。或者...
    • 您还可以将 主题列 添加到 Windows 资源管理器视图以查看产品名称的完整列表。 See this article for how to do this。请注意,对于本地化系统,可能很难找到要显示的正确属性,但如果您的系统是英语,这是一个很好的方法 - 几秒钟内完成概述,没有乏味 "wait for hover pop-up"。
    • 在过去Windows Explorer 状态栏 还显示了 MSI 的产品名称 - 我不确定它是否已经显示 (View => Status Bar)。
  • ResolveSource自定义操作:由于许多外部原因,此缓存文件可能会丢失,但除了外部原因外,有可能存在问题的 MSI 设计不当,并且专门尝试通过调用标准操作 ResolveSource 来解析原始源。我相信这可能会引发您描述的问题。我想 MSI 也可能包含 自定义操作 ,这也可能触发问题 - 我不确定。
    • UPDATE:我下载了有问题的 MSI,但我没有看到任何 ResolveSource 问题 - 坦率地说,我什至不确定是否可以使用此标准操作了。虽然有许多自定义操作 - 其中一些看起来很可疑。我无法安装 MSI 进行测试(缺少 pre-reqs)。
  • 缺少缓存的 MSI:在某些情况下 %SystemRoot%\Installer 中缺少缓存的 MSI - 要么是因为它从未被缓存在安装期间存在,或者因为它被删除或被某些后续进程或机制阻止。一些可能的原因(只是理论):
    • 您的anti-virus或安全软件可能已经隔离了整个缓存的 MSI 文件。我最近看到了这个问题。随着恶意软件的恶化和安全性的加强,这可能会成为一个主要问题。
    • 如果您 磁盘空间不足 space,我想可能会导致奇怪的问题,例如缺少缓存文件。我想你会得到关于 space 问题的适当警告,但是低磁盘 space 会导致 文件/磁盘损坏 ?
    • 除了缺少磁盘 space, 磁盘损坏 也可能由于磁盘 space 以外的其他技术原因自行发生 - 显然 - 这会反过来肯定会导致丢失/无法访问cache-MSI。 恶意软件 是磁盘损坏的罪魁祸首之一。 故障 I/O 驱动程序 另一个。 磁盘表面问题/闪存磨损糟糕的安全软件 无处不在,错误阻止。最重要的是:断电 以及具有巨大缓存容量且没有板载电容器电源的新 NVMe 磁盘,以确保在断电时缓存会被提交。磁盘损坏是不可避免的。清单还在继续。
    • 在与磁盘损坏和磁盘 space 相关的问题中,一些用户尝试 将 MSI OS-protected 缓存文件夹 %SystemRoot%\Installer 重定向到网络位置或其他分区,因为它们的 SSD 系统磁盘已用完 space。完全可以理解,但这可能会导致 MSI 操作完全失败。 .
    • 与前面的要点相关,过分热心的计算机修补匠有时会删除不应触及的系统文件夹文件(尽管文件夹 "super hidden" 且难以访问,它仍然被发现)。一些 自定义、third-party 清理应用程序 也可能会意外删除缓存的 MSI,自定义、管理员清理脚本
    • 我一直怀疑 系统还原 是删除缓存 MSI 的罪魁祸首,但我还没有能够抓到罪魁祸首!
      • 我已经准备好了简易判决,上面有系统恢复的名字,如果有丝毫即将出现的证据("...烧焦child,闻起来有烧焦的味道").
      • 系统还原和其他问题可能是原因吗? (文件/磁盘/注册表损坏?)。可能是之前的,问题可能已经被偷偷修复了?
      • 小心系统还原 - 它是神秘和怪异的来源。我看到它从桌面上删除了我的数据文件。为什么?也许仅用于蓝屏死机(驱动程序故障)和恶意软件。
    • 如上所述,我想 产品安装即将结束时的崩溃或错误 可能会导致缓存的 MSI 永远无法正确进入缓存文件夹, 停电(对于台式机)。
      • 由于缓存很可能在安装过​​程开始之前发生,所以这个原因似乎不太可能,但我会提到它。人们会认为安装不完整,而不是缓存。
      • 删除临时文件/回滚文件时会出现并发症吗?再说一遍:系统还原是否会对文件状态感到困惑? (存在损坏的产品注册的缓存文件?删除它?)
    • 对于您自己的设置,重复安装和测试您的 MSI 可能会触发奇怪的边缘情况(不太可能发生"in the wild") 你看到这种缺乏 MSI 缓存的现象出现在它丑陋的脑袋后面。我见过并发症相同的包裹代码 已被重复使用。非常技术性 - 除了设置开发人员和/或他们的 QA 人员外,不应影响任何人。
    • 并且 与您的系统和网络配置相关的高度技术原因 可能会触发此问题 - 可能特别是在 (终端)服务器上:自定义组策略、自定义权限、自定义 ACL、脚本的模拟上下文等...),但您通常应该在所有包中看到它。您需要真正的服务器专家来明智地谈论这些问题 - 他们可能有很好的理由来锁定事情。

一些链接: