我已经尝试了许多common approaches(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(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但没有结论。我想知道是什么导致了这个问题以及如何解决它?
答案 0 :(得分:1)
很明显,Windows Installer要求安装产品的安装源以允许卸载是不正常的行为。
快速修复? 也许请查看" 卸载MSI "下面是
Microsoft Install / Uninstall Tool
您可以使用它来快速,自动地 - 我相信 - 可靠的方式尝试使用不可卸载的MSI包来解决这种情况。
更新:Microsoft工具应该能够解决您的问题。本答案的其余部分是以" 让我们对这个" :-)并尝试解释潜在原因以及其他一些修复。
另请参阅以下有关如何执行详细,调试日志记录以收集更多信息" intel"针对您的特定卸载/安装问题(可以查明MSI中的确切罪魁祸首 - 例如特定的自定义操作)。
问题的可能原因可能是:
anti-virus blocking
,disk space issues
,user / admin tinkering
,system restore
等...... 以下日志条目让我怀疑是一个反病毒阻止问题,但是缺少需要原始源解析的资源的可能性很小:
SOURCEMGMT: Source is invalid due to missing/inaccessible package.
由于防病毒似乎没有阻止您运行的完全下载的MSI,因此我认为该问题是MSI试图在源媒体上错误地解析和检索的问题。卸载。 可能是MSI设计问题 - 明天会检查更多。
完整,详细的调试日志记录可能会提供更多线索:
msiexec.exe /x {ProductCode} /L*vx! C:\Your.log
(logging details from installsite.org)。以下文字是在决定提出上述三个主要候选人原因之前撰写的。留在内容中供参考。
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
中进行了解释,但我将在此处进行语境化处理:
%SystemRoot%\Installer
中缓存MSI文件。此文件夹是超级隐藏的,您可能需要显示操作系统文件才能在Windows资源管理器中查看它。 Windows密钥 + R +粘贴%SystemRoot%\Installer
+点击 ENTER 。在搜索MSI之前,请阅读下一个要点。View => Status Bar
)。ResolveSource
来解决原始来源。我相信这可能会引发你描述的问题。我想MSI也可以包含可能触发问题的自定义操作 - 我不确定。
ResolveSource
问题 - 坦率地说,我甚至不确定是否可以再使用此标准操作。虽然有许多自定义操作 - 其中一些看起来很可疑。我无法安装MSI进行测试(缺少预先请求)。%SystemRoot%\Installer
中缺少缓存的MSI - 因为它在安装期间从未缓存过,或者因为它是某些后续流程或机制删除或阻止。一些可能的原因(只是理论):
%SystemRoot%\Installer
重定向到网络位置或其他分区,因为他们的SSD系统磁盘是空间不足。完全可以理解,但这可能导致MSI操作完全失败。 See this article for how to do this。一些链接:
答案 1 :(得分:0)
当您执行无提示卸载错误时,它似乎也被假设了,当我尝试在UI中卸载软件包时,我看到了一个对话框,要求我找到该应用程序的MSI文件。不确定它是如何通过这种方式但我通过重新下载包并从there卸载它来修复它。很高兴不必使用我的powershell脚本打包MSI只是为了卸载一个应用程序,但是现在我没有更好的解决方案。