Powershell Silent Uninstall" Microsoft Report Viewer Runtime 2012"

时间:2018-05-22 19:55:47

标签: powershell windows-installer reportviewer uninstall msiexec

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

enter image description here

MSI

$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:UNKNOWN \ 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]:MainEngineThread正在返回1612

     

MSI(20:5C)[14:42:57:904]:用户政策价值' DisableRollback'是0

     

MSI(20:5C)[14:42:57:904]:机器政策价值' DisableRollback'是0

     

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

     

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

     

MSI(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]:递减计数器以禁用关机。如果counter> = 0,则拒绝关闭。减量后的计数器:-1

     

MSI(c)(E8:EC)[14:42:57:906]:减少计数器以禁用关机。如果counter> = 0,则拒绝关闭。减量后的计数器:-1

     

MSI(c)(E8:EC)[14:42:57:906]:MainEngineThread正在返回1612

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

2 个答案:

答案 0 :(得分:1)

缺少/无法访问的来源

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

  

快速修复? 也许请查看" 卸载MSI "下面是Microsoft Install / Uninstall Tool    您可以使用它来快速,自动地 - 我相信 - 可靠的方式尝试使用不可卸载的MSI包来解决这种情况。

更新:Microsoft工具应该能够解决您的问题。本答案的其余部分是以" 让我们对这个" :-)并尝试解释潜在原因以及其他一些修复。

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

问题的可能原因可能是:

  1. 缺少缓存MSI :由于某种原因,在初始安装期间应该在受保护的系统文件夹中创建的缓存MSI丢失了。详情如下。
  2. 缺少源资源 :也可能是卸载过程需要磁盘上缺少的资源并阻止卸载运行。
    • 然后,卸载过程将尝试解析原始安装介质的源,以便获取所需的资源(二进制文件?),然后由于原始源MSI已被删除而无法执行此操作无处可寻。
    • 这通常表示MSI设计问题。卸载中断并且您遇到了问题22(无法卸载,无法升级)。请参阅下面链接的Microsoft工具,以了解解决此问题的可能方法。
    • 如果MSI设计问题确实是原因(并且可以证明是这样),那么您必须尝试与供应商合作,为他们的软件包提供可靠的,未来的修复 - 或者它显然会影响您自己的产品的成功和可靠性。不用说我猜。​​
  3. 其他原因 :下面列出了许多其他可能的外部原因,范围从anti-virus blockingdisk space issuesuser / admin tinkeringsystem restore等......
  4. 以下日志条目让我怀疑是一个反病毒阻止问题,但是缺少需要原始源解析的资源的可能性很小:

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

    我不擅长 Powershell ,但这里有一个关于其用于安装/卸载产品的答案: How can I use powershell to run through an installer? 也许检查新{ {3}}到顶部。

    潜在来源提示原因

    以下部分在Windows Installer PowerShell Module linked中进行了解释,但我将在此处进行语境化处理:

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

    一些链接:

答案 1 :(得分:0)

当您执行无提示卸载错误时,它似乎也被假设了,当我尝试在UI中卸载软件包时,我看到了一个对话框,要求我找到该应用程序的MSI文件。不确定它是如何通过这种方式但我通过重新下载包并从there卸载它来修复它。很高兴不必使用我的powershell脚本打包MSI只是为了卸载一个应用程序,但是现在我没有更好的解决方案。