30

Есть ли способ удалить программы без графического интерфейса и сделать это через CMD?

8 ответов8

26

Вы можете вызвать правильный деинсталлятор, не зная GUID и т.д., Используя WMIC.

Чтобы увидеть список имен программ, известных Windows в Windows:

wmic product get name

Ищите название вашего продукта. Вероятно, он совпадает с тем, что указан на панели управления "Программы и компоненты" , но не всегда.

Тогда вы можете использовать

wmic product where name="_my_product_name" call uninstall

выполнить деинсталляцию, о которой AFAIK должен молчать (это было в моем опыте, но попробуйте, прежде чем ставить ферму на это. Молчание может зависеть от того, как был создан ваш установщик / деинсталлятор).

Смотрите здесь для получения дополнительной информации:

Также на microsoft.com есть справочная документация для WMIC.

19

Каждая программа, которая правильно устанавливает себя в соответствии с рекомендациями Microsoft, делает запись в реестре в HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall . Обычно ключом для программы будет ее GUID или имя программы. В этом ключе будет запись с именем UninstallString . Он содержит команду, которую нужно выполнить для удаления программы.

Если вы заранее знаете, что будете удалять, это должно быть достаточно просто, чтобы поместить это в ваш командный файл. Это становится сложно, когда вы пытаетесь автоматизировать этот процесс, хотя. Вы можете использовать команду reg для получения данных из реестра, но она возвращает много текста о фактическом значении данного ключа, что затрудняет его использование. Возможно, вы захотите поэкспериментировать с использованием VBscript или PowerShell, так как у них есть лучшие варианты для получения данных из реестра в переменную.

7

Если у вас установлен PowerShell 3 (или выше), вы можете выполнить WMI-вызов, чтобы все программы назвали определенную вещь (или «как» определенную вещь, чтобы выполнять поиск по подстановочным знакам), а затем вызвать метод Uninstall для каждой из них. :

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

5

Если программа использует установщик Windows, вы можете использовать одну из следующих команд:

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

Однако, скорее всего, у вас нет ни кода продукта, ни исходного файла MSI, используемого для установки.

Кроме этого, нет общей команды удаления, поскольку установщики, которые не используют установщик Windows, "неизвестны" операционной системе. Они могут предоставить свой собственный исполняемый файл для удаления, но включает ли этот исполняемый файл способ его запуска без графического интерфейса, зависит от отдельного программного пакета.

5

Если вы знаете, где находится файл установщика MSI, вы можете использовать:

Msiexec / удалить приложение.msi / quiet

1

Скрипт 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
1

Проверьте это, это с помощью пакета найти ключ реестра 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
0

Правильный ответ выше, но для установки Windows X64 вам также необходимо проверить:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .