Windows installer 静默MSI卸载不';不存在

Windows installer 静默MSI卸载不';不存在,windows-installer,batch-file,uninstallation,Windows Installer,Batch File,Uninstallation,我正在尝试安静地卸载我的应用程序。如果实际安装了应用程序,这将非常有效,但如果未安装,用户将收到错误消息,必须单击“确定”才能继续 我的命令: MSIEXEC.EXE/qb/L*%LOGDIR%\myuninstaller.log”/x{GUID} 问题是,我需要在我在AD中部署的脚本中清理应用程序的所有旧版本。我不知道在哪台计算机上安装了哪个版本,因此很难首先确定脚本 如何使MSIEXEC不抱怨卸载不存在的GUID?在上找到了答案 似乎我需要使用/qn而不是/qb如果您的所有应用程序在“KEY

我正在尝试安静地卸载我的应用程序。如果实际安装了应用程序,这将非常有效,但如果未安装,用户将收到错误消息,必须单击“确定”才能继续

我的命令: MSIEXEC.EXE/qb/L*%LOGDIR%\myuninstaller.log”/x{GUID}

问题是,我需要在我在AD中部署的脚本中清理应用程序的所有旧版本。我不知道在哪台计算机上安装了哪个版本,因此很难首先确定脚本

如何使MSIEXEC不抱怨卸载不存在的GUID?

在上找到了答案


似乎我需要使用
/qn
而不是
/qb

如果您的所有应用程序在“KEY\u LOCAL\u MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”中都有正确的GUID键,您还可以执行以下操作:

MSIEXEC.EXE /qb /L* "%LOGDIR%\myuninstaller.log" /x{GUID}
这只会在有密钥的情况下启动msiexec.exe(这比在不存在的guid上使用/qn启动msiexec.exe要高效一些)。

对于我的情况,它可以使用:(注意&&operator)

根据此链接,仅当第一个命令成功执行(无错误结果)时,才会执行后续命令(msiexec.exe)。您可以尝试分别测试每个命令

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID} >NUL 2>NUL && MSIEXEC.EXE /qf /L* "%LOGDIR%\myuninstaller.log" /x{GUID}

即使您有一个可接受的答案,也请从serverfault.com上查看此帖子:。有很多方法可以通过自动化卸载MSI,因此您根本不必处理msiexec.exe


也许这也很有用。

不错。我的方法效果更好,但我在这里学到了一些新的东西,而且你的方法更通用,所以我将此设置为答案。你有答案,但请阅读以下内容:。有其他方法来处理部署这样的基本问题是很有用的。还要检查另一个链接:关于调用卸载的各种不同方法,我不太明白,它仍然返回错误(代码1605),这是一个怎样的解决方案?(我的意思是,如果你一开始就忽略了错误代码,那么一切都是“无声的”)
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID} >NUL 2>NUL && MSIEXEC.EXE /qf /L* "%LOGDIR%\myuninstaller.log" /x{GUID}
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID} >C:\registrycheck.log