我正在尝试通过批处理文件卸载程序EXE,但没有取得任何成功。
在注册表中找到的卸载字符串如下:
C:\PROGRA~1\Kofax\Capture\ACUnInst.exe /Workstation
C:\PROGRA~1\Kofax\Capture\UNWISE.EXE /U
C:\PROGRA~1\Kofax\Capture\INSTALL.LOG
如果我从CMD或批处理中运行它,它什么都不做。
如果我从CMD运行C:\PROGRA~1\Kofax\Capture\UNWISE.EXE /U
,它将打开一个对话框,指向INSTALL.LOG文件,然后继续卸载。
最后,它会要求我点击完成。
我需要保持沉默,你能指出我正确的方向吗?这是在XP和7上。
答案 0 :(得分:1)
根据Microsoft指南正确安装的每个程序都会在HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
中生成一个注册表项。通常,程序的密钥将是其GUID,或者程序的名称。在该密钥内将是一个名为UninstallString
的条目。这包含执行卸载程序的命令。
如果您已经提前知道要卸载的内容,那么将其放入批处理文件中应该很容易。当你尝试自动化该过程时,它会变得棘手。您可以使用reg命令从注册表中获取数据,但它会返回大量围绕给定键的实际值的文本,这使得它很难使用。您可能希望尝试使用VBscript或PowerShell,因为它们有更好的选项可以将数据从注册表转换为变量。
这可能对你有所帮助.....
答案 1 :(得分:0)
我遇到了同样的问题,这就是我提出的问题。 在开始使用此方法之前,您可能希望使用CMD在WMIC上查找应用程序的名称,以便...
首先你要做的事:WMIC产品> C:\用户\ “当前用户” \桌面\ allapps.txt
我建议将命令输出到TXT文件,因为在Cmd提示中读取它真的很混乱,而且更容易找到你要查找的数据。
现在你要做的是找到应用程序的实际名称...如果你查看我输入的代码,应用程序名称显示SkypeT,因为skype在其末尾有“™”并且命令提示符可以不能解释原样。
获得应用程序名称后,只需将第4行中的查找放入并替换为包含我的示例的几行,并使用skype ...
你也可以创建一个名为%APP%的变量而不用担心,但目前它的效果还不错......
有一点需要注意!与我一起msi / quiet命令不起作用,程序不会安装或卸载所以我使用/ passive,这让用户可以看到发生了什么。
@Echo off
CD %cd%
:VerInstall
for /f "tokens=12,*" %%a in ('wmic product list system ^| Find /I "SkypeT"') do (
if Errorlevel = 0 (
Echo Skype is installed! )
if Errorlevel = 1 ( Echo Skype is not installed, proceding to the installation!
Ping localhost -n 7 >nul
goto :Reinstall )
)
:Status
tasklist /nh /fi "IMAGENAME eq "APP.exe" | find ":"> nul
if errorlevel = 1 goto :force
goto :Uninstall
:Force
echo We are killing the proccess... Please do not use the application during this process!
Ping localhost -n 7 > nul
taskkill /F /FI "STATUS eq RUNNING" /IM APP* /T
echo The task was killed with success! Uninstalling...
Ping localhost -n 7 > nul
:Uninstall
cls
for /f "tokens=12,*" %%a in ('wmic product list system ^| Find /I "SkypeT"') do (
set %%a=%%a: =%
msiexec.exe /x %%a /passive /norestart
)
:DoWhile
cls
Tasklist /fi "IMAGENAME eq msi*" /fi "STATUS eq RUNNING" | Find ":" >nul
if errorlevel = 1 (
echo Installation in progress
Goto :DoWhile
)
echo Skype is Uninstalled
:Reinstall
msiexec.exe /i SkypeSetup.msi /passive /norestart
:reinstallLoop
Tasklist /fi "IMAGENAME eq msi*" /fi "STATUS eq RUNNING" | Find ":" >nul
if errorlevel = 1 (
echo Installation in progress
goto :reinstallLoop
)
echo Skype is installed
:end
cls
color 0A
Echo Done!
exit
最后一件事。我使用它作为一个不可见的EXE任务,所以用户无法与命令提示符交互并最终关闭窗口(我知道,它使整个回声变得愚蠢,但它是出于测试目的)。为此我使用BAT到EXE转换器2.3.1,你可以把所有东西都用在后台工作,它会非常好用。如果您想向用户显示进度,只需编写START Echo“info”并将信息替换为您想要的任何内容,它将打开另一个提示并显示您需要的信息。
请记住,Wmic命令有时需要20秒才能执行,因为它正在查询计算机的系统,所以它看起来好像一开始什么也没做,但它会运行! ;) 祝你好运:)