2011-01-17 04:15:36 +0000 2011-01-17 04:15:36 +0000
30
30

通过CMD默默地卸载程序

有没有一种方法可以让我不用图形界面,通过CMD卸载程序?

答案 (8)

26
26
26
2014-07-23 21:33:01 +0000

您可以在不知道GUID等的情况下通过WMIC调用正确的卸载程序。

查看Windows内部已知的程序名称列表。

wmic product get name

寻找你的产品名称. 它可能与“程序和功能”控制面板中列出的名称一致,但并不总是一致。

然后你可以使用

wmic product where name="_my_product_name" call uninstall

执行卸载,AFAIK应该是无声的(根据我的经验,它一直是无声的,但在你打赌之前先试试。沉默可能取决于你的安装程序/卸载程序是如何构建的)。)

更多信息请看这里。

在microsoft.com上也有WMIC的参考文档。

19
19
19
2011-01-17 05:14:51 +0000

每一个根据微软的准则正确安装自己的程序都会在HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall中建立一个注册表条目。通常,程序的键将是其GUID,否则就是程序的名称。在该键中会有一个名为UninstallString的条目。这包含了卸载程序所要执行的命令。

如果你已经提前知道了要卸载的程序,那么把它放在批处理文件中就很容易了。但当你试图自动完成这个过程时,就会变得很棘手。你可以使用reg命令从注册表中获取数据,但它会在给定键的实际值周围返回大量的文本,使其难以使用。你可能想尝试使用VBscript或PowerShell,因为它们有更好的选项来从注册表获取数据到变量中。

7
7
7
2015-12-29 14:56:33 +0000

如果你安装了PowerShell 3 (或更高版本),你可以发出一个WMI调用来获取所有以某个事物命名的程序(或者 “喜欢 "某个事物,进行通配符搜索),然后为每个程序调用Uninstall方法。

(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()

5
5
5
2011-01-17 04:24:49 +0000

如果你知道MSI安装程序文件在哪里,你可以使用。

Msiexec /uninstall Application.msi /quiet

5
5
5
2011-01-17 04:23:12 +0000

如果一个程序使用Windows Installer,你可以使用以下命令之一。

msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>

然而,你很可能既没有产品代码,也没有用于安装的原始MSI文件。

除此之外,没有通用的卸载命令,因为没有使用Windows Installer的安装程序是操作系统 “未知 "的。他们可能会提供自己的卸载可执行文件,但该可执行文件是否包括不使用GUI的运行方式,取决于个别软件包。

1
1
1
2018-06-30 22:14:12 +0000

看看这个,这是用批量找到软件的UninstallString注册表键,然后默默卸载软件,这比wmic**可靠多了,我发现 https://community.spiceworks.com/topic/2143980-deploy-or-upgrade-java-8-via-shutdown-script-remove-old-javas

::It extracts software software GUID, then use the GUID to search the name and version
@echo off
setlocal ENABLEDELAYEDEXPANSION

set SoftwareName=Java 8
set NewVersion=8.0.1720.11
set x86GUID=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
set x64GUID=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set Installer=\dc\sources\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s
REM set Installer=d:\downloads\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s

REM It's faster to first locate the software GUID, then search it's Name, Version & UninstallString
for /f "delims=" %%P in ('reg query "%x86GUID%" /s /f "%SoftwareName%" 2^>nul ^| findstr "HKEY_LOCAL_MACHINE"') do (
  echo %%P
  reg query "%%P" /v "DisplayVersion" 2>nul | findstr /r /c:" %NewVersion%" >nul && (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo %%B has already been installed
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayVersion" 2^>nul ^|findstr "DisplayVersion"') do echo Version: %%B
    goto :EOF
  ) || (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo Found other version %%B, upgrade in progress
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "UninstallString" 2^>nul ^|findstr "UninstallString"') do (
      echo %%B | findstr /c:"MsiExec.exe" >nul && (
        set MsiStr=%%B
        set MsiStr=!MsiStr:/I=/X!
        echo !MsiStr! /quiet /norestart
        !MsiStr! /quiet /norestart
        rem %Installer%
      ) || (
        echo None MsiExec Uninstall String %%B
        rem "%%B" /S
      )
    )
  )
)
if not defined MsiStr (
  echo %SoftwareName% not found, install it?
  rem %Installer%
)

endlocal
```。
1
1
1
2015-03-18 17:36:56 +0000

一个VBScript脚本将帮助你卸载需要的程序。

要使用这个脚本,你需要在你的注册表中找到软件名称。

只需在脚本中输入应用程序名称,并以管理员权限运行它,它就会卸载应用程序。但这只适用于基于窗口的应用程序;对于单机版安装或没有在注册表卸载字符串中添加条目的应用程序,该脚本将无法工作。

所以在这种情况下,你将不得不寻找其他方法来卸载应用程序。

代码。

On error resume Next

Dim strName, WshShell, oReg, keyname

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

'=============================================
'Change the value here with DisplayName's value
strName = " "
'=============================================
Set WshShell = CreateObject("WScript.Shell")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    keyname = ""
       keyname = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subkey & "\DisplayName")
    If keyname = strName then
        i = subkey
    End If
Next

If i Then

    WshShell.Run "MSIEXEC.EXE /X " & i & " /QN", 1, True
End If

Set WshShell = Nothing
set ObjReg = Nothing

WScript.Quit
0
0
0
2017-06-08 01:49:09 +0000

正确答案如上,但对于Windows X64的安装,你还需要检查:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
```。