Ich richte ein System ein, um Java in unserem Büro auf dem neuesten Stand zu halten. Jeder hat alle verschiedenen Versionen von Java, von denen viele alt und unsicher sind und einige bis 1.4 zurückreichen. Ich habe einen System Center Essentials-Server, der eine MSI-Datei herausschieben und unbeaufsichtigt ausführen kann, und ich habe bereits getestet, dass er das neueste Java installieren kann. Aber alte Versionen (wie 1.4) werden vom Installationsprogramm nicht entfernt, daher muss ich sie deinstallieren. Auf jedem läuft Windows XP.
Der nette Zufall ist, dass Sun gerade von Oracle gekauft wurde und Oracle nun alle Instanzen von "Sun" in "Oracle" in Java geändert hat. Ich muss mich also bequemerweise nicht um die Deinstallation des neuesten Java kümmern, da ich einfach eine Suche durchführen und alle deinstallieren kann Sun Java-Programme kann.
Ich fand das folgende Batch-Skript in einem Forumsbeitrag, der vielversprechend aussah:
@echo off & cls
Rem List all Installation subkeys from uninstall key.
echo Searching Registry for Java Installs
for /f %%I in ('reg query HKLM\SOFTWARE\microsoft\windows\currentversion\uninstall') do echo %%I | find "{" > nul && call :All-Installations %%I
echo Search Complete..
goto :EOF
:All-Installations
Rem Filter out all but the Sun Installations
for /f "tokens=2*" %%T in ('reg query %1 /v Publisher 2^> nul') do echo %%U | find "Sun" > nul && call :Sun-Installations %1
goto :EOF
:Sun-Installations
Rem Filter out all but the Sun-Java Installations. Note the tilda + n, which drops all the subkeys from the path
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do echo . Uninstalling - %%U: | find "Java" && call :Sun-Java-Installs %~n1
goto :EOF
:Sun-Java-Installs
Rem Run Uninstaller for the installation
MsiExec.exe /x%1 /qb
echo . Uninstall Complete, Resuming Search..
goto :EOF
Wenn ich das Skript ausführe, erhalte ich jedoch die folgende Ausgabe:
Searching Registry for Java Installs
'DEV_24x6' is not recognized as an internal or external command,
operable program or batch file.
'SUBSYS_542214F1' is not recognized as an internal or external command,
operable program or batch file.
Und dann scheint es zu hängen und ich drücke Strg-C, um es zu stoppen.
Beim Lesen des Skripts verstehe ich nicht alles, aber ich weiß nicht, warum versucht wird, Teile von Registrierungsschlüsseln als Programme auszuführen. Was ist los mit dem Batch-Skript? Wie kann ich das Problem beheben, damit ich es irgendwie in ein MSI verwandeln und für alle bereitstellen kann, um dieses Büro aufzuräumen?
Oder können Sie alternativ eine bessere Lösung oder eine vorhandene MSI-Datei vorschlagen, um das zu tun, was ich brauche? Ich möchte nur sicherstellen, dass alle alten Java-Versionen von allen Computern entfernt werden, da ich von Exploits gehört habe, die dazu führen, dass Webseiten mit alten Java-Versionen geladen werden, und ich möchte diese vermeiden.