Yanıtlar:
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. reg
Kayı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.
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.
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 Uninstall
bunların her biri için yöntemi çağırabilirsiniz :
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
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.
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
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
Doğru cevap yukarıda, ancak Windows X64 yüklemeleri için ayrıca kontrol etmeniz gerekecek:
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
/node:"<ComputerName>"
ex: ekleyerek uzaktaki bilgisayarlara karşı çalıştırabilirsinizwmic /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.