bkamk2
Goto Top

Registry - Programm Version auslesen

Hallo ihr Administratoren,

ich habe folgendes Problem:

Ich soll eine Batch Datei schreiben, die mir in der Registry nach einem bestimmten Programm sucht und mir sagt welche Version dieses Programm hat.
Bis jetzt bin ich so weit gekommen, dass mir die insallierten Programme ausgegeben werden.

Nur ab da komme ich nicht weiter.

Wäre Super wenn ihr mir Helfen könntet!

FOR /F "usebackq" %%i IN (`reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products`) DO (  

reg query "%%i\InstallProperties" /v DisplayName  


)

pause

Jetzt soll quasi die ausgegebene Liste nach einem bestimmten Programm durchsucht werden und mir die Versionsnummer ausgeben.

Ist das zu realisieren?

Danke schonmal.

MfG
BKAMk2

Content-ID: 81077

Url: https://administrator.de/forum/registry-programm-version-auslesen-81077.html

Ausgedruckt am: 23.12.2024 um 18:12 Uhr

stbewo
stbewo 19.02.2008 um 08:55:46 Uhr
Goto Top
Hi BKAMk2,

es geht auch einfacher. Falls Du XP Pro SP2 hast dann mit.

WMIC /OUTPUT:Software.htm Product get name,version /FORMAT:hform

Hiermit bekommst Du eine HTML Liste mit Programmname und Versionsangabe.

Oder mit

FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (
Rem %%B = Programmname, %%C = Version
Echo "%%B" "%%C"
)

Gruß
Stefan
BKAMk2
BKAMk2 19.02.2008 um 09:09:35 Uhr
Goto Top
Das Problem ist nur das aus der Batch-Datei ein Installer gestartet werden soll, wenn eine veraltete Version des Programmes eingetragen ist.

Aber danke schonmal für den tipp.

€dit:

Hab gesehen das du noch einen weiteren Vorschlag gepostet hast.
Funktioniert leider auch nicht.

Also es ist recht schwierig zu erklären, was wir genau vorhaben.

Es soll in der Registry nach einem bestimmten Programm gesucht werden und die Versionsnummer überprüft werden.
Die Versionsnummer wird in der Batch durch einen
SET version=VERSIONSNUMMER 
festgelegt.

Sollte die Versionsnummer nicht mit der in der Batch übereinstimmen, wird eine zweite Batch gestartet, die eine Installationsroutine startet. Dadurch wird der Wert in der Registry gleich aktualisiert.

Das Problem an der Sache ist, das Windows in der Registry unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\"
sehr eigenwillig und per Zufall (scheint mir) generierte Schlüssel ablegt.

Und da wir nicht wissen können in welchem Schlüssel die Versionummer steht müssen wir alle durchsuchen.
Und damit nicht jedes Programm eine Installation startet muss der Name auch verglichen werden.

Ich hoffe ich habe jetzt nicht jeden entmutigt.

Wo steckt der Bieber eigentlich?
Biber
Biber 19.02.2008 um 11:00:23 Uhr
Goto Top
Moin BKAMk2,

bei mir würde folgende Mimik am CMD-Prompt zum (Teil-)Erfolg führen:
[Eingabezeilen beginnen mit ">"]
>Set "suchname=MetaFrame Presentation Server Client"  
>SET "rootkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"  
>for /f %i in ('reg query "%rootkey%"') do @For /f "tokens=2,*" %j in ('reg query "%i\InstallProperties" /v Displayname ^2^>nul ^|find "Displayname"') do @if "%k"=="%suchname%" for /f "tokens=2,*" %a in ('reg query "%i\InstallProperties" /v DisplayVersion^|find "Version"') do @echo %k: %b  
MetaFrame Presentation Server Client: 9.230.50211

Im Batch sähe das formatiert in etwa so aus:

 @echo off & setlocal
Set "suchname=MetaFrame Presentation Server Client"  
Set "rootkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"  

for /f %%i in ('reg query "%rootkey%"') do (  
    For /f "tokens=2,*" %%j in ('reg query "%%i\InstallProperties" /v Displayname ^2^>nul ^|find "Displayname"') do (  
      if "%%k"=="%suchname%" (  
         for /f "tokens=2,*" %%a in ('reg query "%%i\InstallProperties" /v DisplayVersion^|find "Version"') do set "version=%%b"  
      )
))      

Echo Ermittelte DisplayVersion für [%suchname%]: [%version%]
[ungetestet]

Natürlich ist es so etwas hakelig an zwei Stellen:
1) Man/frau muss den exakten "Displaynamen" wissen.
2) die DisplayVersion-Formatierung ist seeeeeeehr frei in der Gestaltung. Bzw. in der Darstellung.

Ich würde erstmal mit diesem Ansatz versuchen, wie weit ihr damit bei Eurem speziellen Fall kommt.
Ggf. müssen wir dann noch mal ein Brainstorming über eine andere Strategie machen.

Grüße
Biber
stbewo
stbewo 19.02.2008 um 11:02:45 Uhr
Goto Top
Ich habe es jetzt einmal mit Versionsnummer angepasst.

setlocal enabledelayedexpansion
SET Versionsnummer=1.0
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (
set "Program=%%B"
set "Version=%%C"
if "!PROGRAM!"=="Photo Editor" (
if "!VERSION:~0,-1!"=="%versionsnummer%" echo "!PROGRAM!" "!VERSION:~0,-1!"
)
rem Anzeige aller Programme "REM" entfernen.
rem echo "!PROGRAM!", "!VERSION:~0,-1!"
)

Gruß
Stefan
BKAMk2
BKAMk2 20.02.2008 um 13:34:19 Uhr
Goto Top
So hat jetzt Funktioniert.
Bin euch echt zu tiefsten Dank verpflichtet.

Hier nochmal der Finale Code:
@echo off
setlocal enabledelayedexpansion
SET versionsnummer=1.6
set "found=0"  
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (  
set "Program=%%B"  
set "Version=%%C"  
if "!PROGRAM!"=="WinRar" (  
set "found=1"  
if not "!VERSION:~0,-1!"=="%versionsnummer%" call \\server1\update.bat  
if "!VERSION:~0,-1!"=="%Versionsnummer%" echo OK!  
)
)
)
rem Anzeige aller Programme "REM" entfernen.  
rem echo "!PROGRAM!", "!VERSION:~0,-1!"  
IF "!found!"=="0" call \\server1\install.bat  

Nochmals vielen Dank!

MfG
BKAMk2
stbewo
stbewo 20.02.2008 um 15:13:08 Uhr
Goto Top
Um es noch etwas einfacher zu machen.

SET ProgVers=6.6.0.8
SET Programm=Nero
FOR /F "tokens=1,2 skip=1 delims= " %%A IN ('"WMIC product where (Name='%Programm%' and version='%ProgVers%') get name,version"') DO (
Echo Programm = %%A Version = %%B
)

Damit bekommst Du nur die Programme zurück, die der Abfrage entsprechen. Du musst aber vorher wissen nach was man sucht. Die Vorgehensweise kennst Du jetzt mit WMIC.

Gruß
Stefan
BKAMk2
BKAMk2 20.02.2008 um 15:44:15 Uhr
Goto Top
Er zeigt mir doch jetzt garnix mehr an.
Was er jetzt macht entspricht auch vollkommen dem was er machen sollte.
Er prüft ob die Software installiert ist. Wenn ja überprüft er die Version.
Sollte die Versionsnummer anders sein als erwünscht startet er ein Update.

Sollte die Software nicht installiert sein startet er eine Installationsbatch.

Aber vielen Dank. Ich denke alleine wäre ich nie auf die WMIC gekommen

Selbst mein Ausbilder war erstaunt was es nicht alles gibt