CMD ile programları sessizce kaldırma


Yanıtlar:


19

Kendini Microsoft'un kurallarına uygun olarak yükleyen her program bir kayıt defteri girdisi yapar HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. Genellikle, programın anahtarı GUID'si veya programın adı olacaktır. Bu anahtarın içinde bir giriş olacaktır UninstallString. Bu, programı kaldırmak için çalıştırılacak komutu içerir.

Önceden ne kaldıracağınızı önceden biliyorsanız, toplu iş dosyanıza koymak yeterince kolay olmalıdır. Yine de bu işlemi otomatikleştirmeyi denediğinizde zorlaşıyor. regKayıt defterinden veri almak için komutu kullanabilirsiniz , ancak verilen bir anahtarın gerçek değeri etrafında çok fazla metin döndürür, bu da kullanımını zorlaştırır. Kayıt defterinden bir değişkene veri almak için daha iyi seçeneklere sahip olduklarından VBscript veya PowerShell'i kullanmayı denemek isteyebilirsiniz.


26

WMIC kullanarak GUID'yi vb. Bilmeden doğru kaldırıcıyı çağırabilirsiniz.

Windows tarafından dahili olarak bilinen programların adlarının bir listesini görmek için:

wmic product get name

Ürün adınızı arayın. Muhtemelen "Programlar ve Özellikler" kontrol panelinde listelenenlerle eşleşir , ancak her zaman değil.

Sonra kullanabilirsiniz

wmic product where name="_my_product_name" call uninstall

AFAIK'in sessiz olması gereken kaldırma işlemini gerçekleştirmek için (bu benim deneyimimdeydi, ancak bunun üzerine çiftliğe bahis yapmadan önce deneyin. Sessizlik kurulumcunuzun / kaldırıcınızın nasıl inşa edildiğine bağlı olabilir).

Daha fazlası için buraya bakınız:

Ayrıca microsoft.com'da WMIC için referans belgeleri de bulunmaktadır.


2
Bunu /node:"<ComputerName>"ex: ekleyerek uzaktaki bilgisayarlara karşı çalıştırabilirsiniz wmic /node:"someuser-pc" product get name. Adın etrafında "" kullandığınızdan emin olun, aksi takdirde "Geçersiz Genel Anahtar" hatasını alırsınız. Ayrıca bunu "CMD istemcisinden" "PowerShell isteminde" "geçici çözüm" hatası için geçici çözüm olmadığından PowerShell isteminde çalıştırmadığınızdan emin olun.
Chris Magnuson

Harika cevap, ancak küçük uyarı, WMIC'in bir komutu yerine getirmek için oldukça fazla zaman alabilmesidir. Ürünlerin listesi bilgisayarımda yaklaşık 3 dakika sürdü.
SmacL

7

Eğer PowerShell 3 (veya daha üstü) kurulu ise, WMI aramasını belirli bir şey (veya belirli bir şeyi 'beğenmek', joker karakter aramaları yapmak) olarak adlandırmak için bir WMI araması düzenleyebilir ve ardından Uninstallbunların her biri için yöntemi çağırabilirsiniz :

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


5

MSI yükleyici dosyasının nerede olduğunu biliyorsanız, şunları kullanabilirsiniz:

Msiexec / application.msi / quiet'ı kaldır


5

Bir program Windows Installer kullanıyorsa, aşağıdaki komutlardan birini kullanabilirsiniz:

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

Ancak, muhtemelen ürün kodunuz veya kurulum için kullanılan orijinal MSI dosyanız yoktur.

Bunun dışında, Windows Installer'ı kullanmayan yükleyiciler işletim sistemi tarafından "bilinmiyor" olduğundan genel bir kaldırma komutu yoktur. Kendi kaldırma yürütülebilir dosyalarını sağlayabilirler, ancak bu yürütülebilir dosyanın GUI olmadan çalıştırmanın bir yolunu içerip içermediği, tek tek yazılım paketine bağlıdır.


1

Bir VBScript betiği, gerekli programı kaldırmanıza yardımcı olacaktır.

Bu betiği kullanmak için kayıt defterinde bulunan bir yazılım adı gerekir.

Sadece komut dosyasını uygulama adını girin ve yönetici ayrıcalıklarıyla çalıştırın; uygulamayı kaldıracak. Ancak bu sadece pencere tabanlı bir uygulama için işe yarayacaktır; bağımsız kurulum veya kaldırma dizesinde bir giriş yapılmayan uygulamalar için komut dosyası çalışmaz.

Bu durumda, uygulamayı kaldırmak için başka bir yol bulmanız gerekecek.

Kod:

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

Bunu kontrol edin, bu bir toplu iş kullanarak yazılımın UninstallString kayıt defteri anahtarını bulun ve sonra bulduğum wmic ile karşılaştırıldığında çok daha güvenilir olan yazılımı sessizce kaldırın . 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

Doğru cevap yukarıda, ancak Windows X64 yüklemeleri için ayrıca kontrol etmeniz gerekecek:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.