Désinstallation de programmes en silence via la CMD
Y a-t-il un moyen de désinstaller des programmes sans l'interface graphique et de le faire via CMD ?
Y a-t-il un moyen de désinstaller des programmes sans l'interface graphique et de le faire via CMD ?
Vous pouvez invoquer le bon désinstallateur sans connaître le GUID, etc. en utilisant le WMIC.
Pour voir la liste des noms des programmes tels qu'ils sont connus en interne par Windows :
wmic product get name
Cherchez le nom de votre produit. Il correspond probablement à celui qui figure dans le panneau de configuration “Programmes et fonctionnalités”, mais pas toujours.
Ensuite, vous pouvez utiliser
wmic product where name="_my_product_name" call uninstall
pour effectuer la désinstallation, que l'AFAIK devrait taire (cela a été le cas dans mon expérience, mais essayez avant de parier la ferme sur cela. Le silence peut dépendre de la façon dont votre installateur/désinstallateur a été construit).
Voir ici pour en savoir plus :
Il existe également une documentation de référence pour WMIC sur microsoft.com.
Tout programme qui s'installe correctement selon les directives de Microsoft fait une entrée dans le registre en HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
. Habituellement, la clé du programme sera son GUID, ou bien le nom du programme. Dans cette clé, il y aura une entrée appelée UninstallString
. Celle-ci contient la commande à exécuter pour désinstaller le programme.
Si vous savez déjà à l'avance ce que vous allez désinstaller, il devrait être assez facile de le mettre dans votre fichier de commandes. Mais cela devient difficile lorsque vous essayez d'automatiser ce processus. Vous pouvez utiliser la commande reg
pour obtenir des données du registre, mais elle renvoie beaucoup de texte autour de la valeur réelle d'une clé donnée, ce qui la rend difficile à utiliser. Vous voudrez peut-être essayer d'utiliser VBscript ou PowerShell, car ils offrent de meilleures options pour obtenir des données du registre dans une variable.
Si vous avez installé PowerShell 3 (ou supérieur), vous pouvez lancer un appel WMI pour que tous les programmes soient nommés d'une certaine manière (ou “aiment” une certaine manière, pour faire des recherches avec des jokers), puis lancer la méthode Uninstall
pour chacun d'entre eux :
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
Si un programme utilise Windows Installer, vous pouvez utiliser l'une des commandes suivantes :
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
Cependant, vous n'avez probablement ni le code du produit ni le fichier MSI original utilisé pour l'installation.
A part cela, il n'y a pas de commande de désinstallation générique, car les installateurs qui n'utilisent pas Windows Installer sont “inconnus” du système d'exploitation. Ils peuvent fournir leur propre exécutable de désinstallation, mais le fait que cet exécutable comprenne un moyen de l'exécuter sans interface graphique dépend de chaque logiciel.
Regardez ça, c'est en utilisant un lot : trouvez la clé de registre UninstallString du logiciel et ensuite désinstallez le logiciel silencieusement, ce qui est beaucoup plus fiable que wmic J'ai trouvé 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
```.
Un script VBScript vous aidera à désinstaller le programme requis.
Pour utiliser ce script, vous aurez besoin du nom du logiciel qui se trouve dans votre registre.
Il suffit d'entrer le nom de l'application dans le script et de l'exécuter avec les privilèges d'administrateur ; cela désinstallera l'application. Mais cela ne fonctionnera que pour une application basée sur une fenêtre ; pour une installation autonome ou des applications qui ne font pas d'entrée dans la chaîne de désinstallation du registre, le script ne fonctionnera pas.
Dans ce cas, vous devrez trouver un autre moyen de désinstaller l'application.
Code :
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