Powershell静默卸载“;“Microsoft报表查看器运行时2012”;

Powershell静默卸载“;“Microsoft报表查看器运行时2012”;,powershell,reportviewer,uninstallation,windows-installer,Powershell,Reportviewer,Uninstallation,Windows Installer,我已尝试了许多(MSI、PowerShell)以静默方式卸载以下应用程序: MSI $ReportViewer2012 = Get-WmiObject -Class Win32_Product -Filter "Name = 'Microsoft Report Viewer 2012 Runtime'" | Select-Object -Expand IdentifyingNumber if ($ReportViewer2012) { echo "Uni

我已尝试了许多(MSI、PowerShell)以静默方式卸载以下应用程序:

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(20:84)[14:42:57:903]:SOURCEMGMT:由于缺少/无法访问包,源无效

MSI(20:84)[14:42:57:903]:注:1:17062:-2147483647 3:ReportViewer.MSI

MSI(20:84)[14:42:57:903]:源管理:处理URL源列表

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

MSI(20:84)[14:42:57:903]:注:1:17062:-2147483647 3:ReportViewer.MSI

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

MSI(20:84)[14:42:57:903]:源管理:未能解析源

MSI(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(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(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]:MainEngineThread正在返回1612


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

当您执行静默卸载错误时,它看起来就像您所想的那样,并且被抑制。当我尝试在UI中卸载软件包时,出现了一个对话框,要求我定位应用程序的MSI文件。我不知道它是怎么做到的,但我通过重新下载软件包并从中卸载来修复它。不必为了卸载应用程序而使用powershell脚本打包MSI会很好,但现在我没有更好的解决方案。

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

缺少/无法访问源代码 很明显,Windows Installer请求已安装产品的安装源以允许卸载是不正常的行为

快速修复?请在下面的“卸载MSI”下查找
Microsoft安装/卸载工具
您可以使用它来尝试以一种快速、自动和(我相信)可靠的方式解决无法卸载的MSI包的问题

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

另请参见下文,了解如何执行详细的调试日志记录,为您的特定卸载/安装问题收集更多的“英特尔”(可以查明MSI中的确切原因,例如特定的自定义操作)

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

  • 缺少缓存MSI:由于某些原因,在初始安装期间应在受保护的系统文件夹中创建的缓存MSI丢失。详情解释如下
  • 缺少源资源:也可能是卸载过程需要磁盘上缺少的资源,导致卸载无法运行。
    • 然后,卸载过程将尝试解析原始安装介质的源,以便获得所需的资源(二进制?),但由于原始源MSI已被删除且找不到,卸载过程将失败
    • 这通常表示MSI设计问题。卸载中断,您被困在catch 22(无法卸载,无法升级)中。有关解决此问题的潜在方法,请参阅下面链接到的Microsoft工具
    • 如果MSI设计问题确实是原因(并且可以证明是这样),您必须尝试与供应商合作,为其软件包提供可靠的、未来的修复方案,否则它将明显影响您自己产品的成功和可靠性。我想不用说
  • 其他原因:下面列出了许多其他潜在的外部原因,包括
    防病毒阻止
    磁盘空间问题
    用户/管理员修补
    系统还原
    ,等等
  • 以下日志条目使我怀疑存在防病毒阻止问题,但是缺少需要原始源解析的资源的可能性也很高:

    SOURCEMGMT:由于缺少/无法访问包,源无效。
    
    由于反病毒似乎不会阻止您下载的完整MSI运行,因此我认为该问题是MSI在卸载期间试图错误解决并从源媒体检索的缺失资源可能是
    msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress