Windows 7 如何通过批处理文件创建脚本,以便在windows 7 64位或32位上安装程序时卸载该程序

Windows 7 如何通过批处理文件创建脚本,以便在windows 7 64位或32位上安装程序时卸载该程序,windows-7,batch-file,windows-xp,uninstallation,Windows 7,Batch File,Windows Xp,Uninstallation,我手头拮据。该程序可以安装在program files目录(64位)或X86路径中。该程序已经安装在200多台机器上。我相当确定默认安装路径是X86,因为这是默认路径。我不确定,必须涵盖这两种情况。安装此软件的原始系统管理员没有使用.msi,因此我只剩下我找到的“C:\Program Files\InstallShield安装信息{78AC336D-25F6-4916-A711-2EA2F69E0319}\setup.exe“作为一个实用程序提供的远程卸载我发现的应用程序的命令。没有工作,我不能

我手头拮据。该程序可以安装在program files目录(64位)或X86路径中。该程序已经安装在200多台机器上。我相当确定默认安装路径是X86,因为这是默认路径。我不确定,必须涵盖这两种情况。安装此软件的原始系统管理员没有使用.msi,因此我只剩下我找到的“C:\Program Files\InstallShield安装信息{78AC336D-25F6-4916-A711-2EA2F69E0319}\setup.exe“作为一个实用程序提供的远程卸载我发现的应用程序的命令。没有工作,我不能试图推出来,希望它会工作

鉴于此问题,是否有办法通过脚本卸载此程序,该脚本将检查程序文件和X86路径,并根据位置进行卸载?或者,是否有一个脚本可以直接卸载程序,而不考虑X86/program的原始安装位置。我只需要在所有这些机器上卸载它。安装。蝙蝠很好用。我不能做的只是让window通过一个用于32位或64位机器的脚本卸载X应用程序

我已经尝试过MsiExec.exe/X{78AC336D-25F6-4916-A711-2EA2F69E0319}/quiet,但没有尝试。这一次我可以尝试安装.msi,但是我不知道怎么安装了,我的知识仅限于脚本或任何卸载脚本,这些脚本可以告诉“最终用户”,而不会让他们感到困惑,只需单击此处即可。我可以告诉他们去控制面板等…但他们会迷路…典型的

考虑到这个卸载不是原创的.msi,我不知道如何让它工作,你有什么想法吗?我什么都愿意。我有两天时间把它修好,我现在处于恐慌状态

任何关于代码的想法或帮助都将不胜感激

问候,,
Brian可以调用卸载程序。我还没试过这个,但我觉得可能有用

wmic /node:computername /user:adminuser /password:password product where name="name of application" call uninstall
如果您不知道程序本身调用什么,请执行以下操作

wmic product get name | sort
并寻找它。还可以使用SQL ish通配符卸载

wmic /node:computername /user:adminuser /password:password product where "name like '%j2se%'" call uninstall
。。。例如,将对
*j2se*
执行不区分大小写的搜索,并卸载“j2se运行时环境5.0更新12”。(请注意,在上面的示例中,
%j2se%
不是一个环境变量,而是一个两端都带有SQL-ish通配符的单词“j2se”。如果搜索字符串可能与环境或脚本变量冲突,请使用双百分比指定文字百分比符号,如
%j2se%%

如果wmic在完成卸载前提示进行确认,请尝试以下操作:

echo y | wmic /node:computername /user:adminuser /password:password product where name="whatever" call uninstall
。。。在它发出请求之前将
y
传递给它

我还没有测试过,但无论如何值得一试。如果它在一台计算机上工作,那么您可以使用for循环遍历包含组织内所有计算机名的文本文件,或者将其放入域策略登录脚本中


假设您使用的是Windows 7 x64以及以前使用某种安装程序安装的东西,您可以打开regedit并在下面搜索密钥

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
(引用32位程序)作为程序名称的一部分,或

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
(如果它实际上是一个64位程序)

如果您在其中一个键中找到与您的程序匹配的内容,则该键中的
UninstallString
的内容通常会给出您要查找的确切命令(可以在脚本中运行)

如果您在这些注册表位置中找不到任何相关内容,那么它可能是通过解压缩文件“安装”的。因为您提到了通过控制面板将其移除,所以我推测情况可能并非如此;如果它在那里的程序列表中,它应该在我提到的一个注册表项中

然后在.bat脚本中,您可以

if exist "c:\program files\whatever\program.exe" (place UninstallString contents here)
if exist "c:\program files (x86)\whatever\program.exe" (place UninstallString contents here)

根据我的经验,要在脚本中使用
wmic
,您需要正确使用嵌套引用:

wmic product where "name = 'Windows Azure Authoring Tools - v2.3'" call uninstall /nointeractive 

同时引用查询和名称。但是wmic将只卸载通过windows installer安装的东西。

你好,Rojo-谢谢。我会在上午试试这个。我想我可以使用它并通过GP应用它。我对你感激不尽。我将看到什么给我的结果和张贴。再次感谢你。让每个人都知道。Rojo-尝试在txt文件中输入wmic产品get name | sort以在win7/64中作为.bat运行-不工作,但我可以想象这是一个ID 10 T错误(me)…我遗漏了什么?Thx@Brian-只需在cmd提示符下运行它。不需要使用批处理文件。如果您查询的是本地机器,语法与上面的一样。如果您询问远程计算机安装了什么,则必须添加一些开关:
wmic/node:computername/user:adminuser/password:password产品get name | sort
。如果您需要比名称更多的信息,例如供应商、安装位置、版本等,请在运行命令时查看
wmic/node:computername/user:adminuser/password:password/output:“path\to\index.html”产品列表/format:HTABLE
,然后查看
path\to\index.html
。我尝试使用该命令在本地计算机上查询程序名。我在卸载菜单中看到该程序,但wmic没有列出它。我知道它在那里,所以我可能必须引导用户只运行C:\Windows\System32\rundll32.exe shell32.dll,通过.bat控制\u RunDLL appwiz.cpl,并要求他们手动卸载程序。不确定我需要卸载的程序是否未能在Windows中正确注册,但新版本确实通过wmic的产品get name正确报告。似乎我对如何“告诉Windows卸载”感到有限。@Rojo-我知道新的应用程序产品get name是准确的,除了年份(即programname 2010与programname 2011)。注意,通过vmic get name可以正确查询程序名2011,所以我想知道我是否只需转出