代码之家  ›  专栏  ›  技术社区  ›  David Rogers

PowerShell静默卸载“Microsoft Report Viewer Runtime 2012”

  •  1
  • David Rogers  · 技术社区  · 7 年前

    我试过很多 common approaches (msi,powershell)以静默方式卸载以下应用程序:

    enter image description here

    大规模集成电路

    $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:源由于缺少/无法访问包而无效。

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

    msi(s)(20:84)[14:42:57:903]:sourceMgmt:处理URL源列表。

    msi(s)(20:84)[14:42:57:903]:注意:1:1402 2:未知\url 3:2

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

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

    msi(s)(20:84)[14:42:57:903]:SourceMgmt:未能解析源

    msi(s)(20:84)【14:42:57:903】:主机读取返回1612

    msi(s)(20:5c)[14:42:57:904]:用户策略值'disablerollback'为0

    msi(s)(20:5c)[14:42:57:904]:计算机策略值'disablerollback'为0

    msi(s)(20:5c)[14:42:57:904]:递增计数器以禁用关机。递增后的计数器:0

    msi(s)(20:5c)【14:42:57:905】:注:1:1402 2:hkey_local_machine\software\microsoft\windows\currentversion\installer\rollback\scripts 3:2

    msi(s)(20:5c)【14:42:57:905】:注:1:1402 2:hkey_local_machine\software\microsoft\windows\currentversion\installer\rollback\scripts 3:2

    msi(s)(20:5c)[14:42:57:905]:递减计数器以禁用关机。如果计数器>=0,关闭将被拒绝。递减后计数器:-1

    msi(c)(e8:ec)[14:42:57:906]:递减计数器以禁用关机。如果计数器>=0,关闭将被拒绝。递减后计数器:-1

    msi(c)(e8:ec)[14:42:57:906]:主机读取返回1612

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Stein Åsmul    6 年前

    缺少/无法访问源

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

    快速修复? 也许看看下面” 卸载MSI “以下为 Microsoft Install / Uninstall Tool 您可以使用它以一种快速、自动和(我相信)可靠的方式尝试解决不可卸载的MSI包的问题。

    更新 :Microsoft工具应该能够解决您的问题。剩下的答案都是本着 让我们为这个着迷吧 “:-)并尝试解释可能的原因以及其他一些修复方法。

    另请参见下面的操作方法 详细,调试日志 为您的特定卸载/安装问题收集更多的“Intel”(可能会精确指出MSI中的确切罪魁祸首,例如特定的自定义操作)。

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

    1. 缺少缓存MSI :由于某种原因,在初始安装过程中应该在受保护的系统文件夹中创建的缓存MSI丢失。详细说明如下。
    2. 缺少源资源 :也可能是卸载过程需要磁盘上丢失的资源,从而阻止卸载运行。
      • 然后,卸载过程将尝试解析原始安装介质的源,以便获得所需资源(二进制?),然后由于原始源MSI已被删除,并且找不到该源,所以无法执行此操作。
      • 这通常表示MSI设计问题 . 卸载中断,您被一个catch 22卡住(无法卸载,无法升级)。有关解决此问题的潜在方法,请参阅下面链接到的Microsoft工具。
      • 如果一个MSI设计问题确实是其原因(并且可以肯定是这样),您必须尝试与供应商合作,为他们的软件包提供可靠的、未来的修复方案,否则它将明显影响您自己产品的成功和可靠性。我想是不言而喻。
    3. 其他原因 :下面列出了许多其他潜在的外部原因,范围从 anti-virus blocking , disk space issues , user / admin tinkering , system restore 等等…

    以下日志条目使我怀疑 防病毒阻塞问题 但是,需要原始源解析的丢失资源同样可能:

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

    由于反病毒似乎无法阻止您下载的完整的MSI运行,我认为问题是一个丢失的资源,MSI试图在卸载期间错误地解决并从源媒体检索。 可能是MSI设计问题 -明天再查。

    完整、详细、调试日志记录 可能提供进一步的线索:

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


    卸载MSI

    Microsoft安装/卸载工具 :有一个Microsoft工具可用于案例 如果出现无法解决的安装/卸载问题: Fix problems that block programs from being installed or removed

    通常卸载现有安装的方法是 use the product GUID of the product in question and kick off the uninstall 如下所示- 带详细日志的静默卸载 :

    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 (我最喜欢的是第三部分)。

    我不擅长 PowerShell ,但下面是前面关于其用于安装/卸载产品的答案: How can I use powershell to run through an installer? 也许检查一下那个新的 Windows Installer PowerShell Module linked 到顶部。


    潜在源提示原因

    以下部分解释见 the answer you link to above (section 12) ,但我将在此处将其上下文化:

    • 缓存的MSI :Windows Installer将MSI文件缓存到 %SystemRoot%\Installer 在原始安装过程中。此文件夹是超级隐藏的,您可能需要显示操作系统文件才能在Windows资源管理器中看到它。 Windows键 + R +粘贴 %SystemRoot%\安装程序 +HIT 进入 . 在搜索您的MSI之前,请阅读下一个项目符号点。
    • ranom,十六进制名称 :此缓存的MSI被分配为 随机十六进制名称 并且在维护和卸载操作期间使用,并且不需要指向用于从中安装任何此类操作的原始源MSI。 More details on this caching (Microsoft不断更改此缓存的工作方式)。 无论您做什么,都不要在此OS文件夹中进行任何更改!
      • 要查找您的msi,请将鼠标按顺序悬停在随机msi名称上,然后 黄色弹出窗口 应该向您展示MSI的用途。重复,直到找到你的微星。或者…
      • 您也可以添加 主题栏 到Windows资源管理器视图查看完整的产品名称列表。 See this article for how to do this . 请注意,对于本地化的系统,很难找到要显示的正确属性,但是如果您的系统是英文的,这是一个很好的方法-在几秒钟内全面概述,没有繁琐的“等待鼠标悬停”弹出窗口。
      • 在过去, Windows资源管理器状态栏 还显示了MSI的产品名称-我不确定它是否会继续。( View => Status Bar )
    • 解决资源 自定义操作 :由于许多外部原因,此缓存文件可能丢失,但除了外部原因外,可能是所讨论的MSI设计不正确,并通过调用标准操作专门尝试解决原始源。 ResolveSource . 我相信这会引发你描述的问题。我想MSI也可以包含 自定义操作 这也可能引发问题-我不确定。
      • 更新 :我下载了相关的MSI,但没有看到任何 解决资源 问题-坦率地说,我甚至不确定这个标准操作是否可以再使用。但是有许多自定义操作-其中一些看起来可疑。我无法安装MSI进行测试(缺少先决条件)。
    • 缺少缓存的MSI :在某些情况下,缓存的MSI在 %SystemRoot%\安装程序 -或者是因为它在安装过程中从未缓存在那里,或者是因为它被某些以后的进程或机制删除或阻止。一些可能的原因(只是理论):
      • 你的 防病毒或安全软件 可能隔离了整个缓存的msi文件。我最近才发现这个问题。随着恶意软件的恶化和安全性的加强,这可能成为一个主要问题。
      • 如果你是 磁盘空间不足 ,我想会导致一些奇怪的问题,比如这个丢失的缓存文件。不过,我认为您会得到有关空间问题的适当警告,但磁盘空间不足会导致 文件/磁盘损坏 ?
      • 除了缺少磁盘空间, 磁盘损坏 当然,这也可能是由于磁盘空间以外的其他技术原因造成的,而这必然会导致丢失/无法访问的缓存MSI。 恶意软件 是磁盘损坏的罪魁祸首之一。 故障I/O驱动器 另一个。 盘表面问题/闪光磨损 也。 坏的安全软件 用错误的阻塞来干预任何地方。最大的一个是: 停电 和新的NVMe磁盘具有巨大的缓存容量,没有板载电容器电源,以确保缓存承诺,如果停电。磁盘损坏是不可避免的。名单还在继续。
      • 在与磁盘损坏和磁盘空间相关的问题中,一些用户试图 重定向受MSI OS保护的缓存文件夹 %SystemRoot%\安装程序 到网络位置或其他分区,因为它们的SSD系统磁盘空间不足。完全可以理解,但这可能导致MSI操作完全失败。 See this answer for the problem and some suggested workarounds .
      • 与前一个要点有关,过分热心 电脑修理工 有时删除不应触摸的系统文件夹文件(尽管该文件夹是“超级隐藏”的并且很难访问,但仍然会找到它)。一些 自定义第三方清理应用程序 也可能会意外删除缓存的MSI 自定义,管理员清理脚本 .
      • 我一直怀疑 系统还原 当涉及到删除缓存的MSI时,我是一个罪魁祸首,但我还没能在这一行为中抓住违法者!
        • 我已经准备好了总结性的判断,上面有系统还原的名称,如果有任何即将到来的证据(“ …烧焦的孩子,有烧焦的气味 “”。
        • 系统还原是否可能与其他问题结合在一起?( 文件/磁盘/注册表损坏? )这可能是以前的事,问题可能是秘密解决的?
        • 小心系统恢复-它是神秘和古怪的来源。我看到它从桌面上删除了我的数据文件。为什么?也许只针对死亡(驾驶员故障)和恶意软件的蓝屏使用它。
      • 如上所述,我想 产品安装结束时发生崩溃或错误 可能会导致缓存的MSI无法正确进入缓存文件夹,就像 停电 (用于台式机)。
        • 考虑到缓存可能会在安装过程开始之前发生,这个原因似乎不太可能发生,但我会提到它。人们会认为安装是不完整的,而不是缓存。
        • 删除临时文件/回滚文件时可能会出现复杂情况?再次强调:系统还原是否会对文件状态感到困惑?(存在带有损坏产品注册的缓存文件吗?移除它?)
      • 为了 你自己的设置 ,重复安装和测试您的MSI可以触发 奇怪的边缘案例 (不太可能发生在“野外”)在这里,你可以看到这个缺乏MSI缓存的现象背后的丑陋的头部。我见过并发症 相同的包装代码 已被重复使用。非常技术性——除了安装开发人员和/或他们的QA人员之外,不应该影响任何人。
      • 高技术原因 与系统和网络的配置相关的问题可能会引发这个问题,特别是在 (终端)服务器 :自定义组策略、自定义权限、自定义ACL、脚本的模拟上下文等…,但通常应该在所有包中看到它。你需要一个真正的服务器专家来解释这些问题——他们可能有很好的理由来锁定这些问题。

    一些链接:

        2
  •  0
  •   David Rogers    7 年前

    当您执行静默卸载时,也会抑制错误,当我尝试在UI中卸载包时,会出现一个对话框,要求我找到应用程序的msi文件。不知道它是怎么做到的,但我通过重新下载包并从中卸载来修复它。 there . 如果不只是为了卸载应用程序而使用PowerShell脚本打包MSI,那就太好了,但是现在我没有更好的解决方案。