[C] || [Batch] Wert aus der Registry auslesen

Steusi

Nasenbär
Hallo Leute ich benötige einen Teilstring vom Wert eines Registry-Schlüssels.

Nur leider arbeite ich in diesem Bereich sehr selten, daher dachte ich mir eine einfach batch-Datei genügt, doch damit kann man keinen Teilstring auslesen oder?

Ich möchte mittels des MSI-Installer eine Anwendung (Opera) automatisch deinstallieren, dazu sieht meine Batch-Datei wie folgt aus:

Code:
regedit /E export.txt "HKEY_CLASSES_ROOT\Installer\Products"

FIND "ProductIcon" /N export.txt > product.txt
FIND "Opera" /N product.txt > opera.txt
del export.txt
del product.txt

REM ID = ********?
REM MsiExec.exe /QN /NORESTART /X ID

Damit komme ich zu dem Punkt das in opera.txt folgendes steht:
Code:
---------- PRODUCT.TXT
[21][2064]"ProductIcon"="C:\\WINDOWS\\Installer\\{18E65799-76BD-46EF-9E53-972FE5A40736}\\Opera"
Nur benötige ich nur den ID-String inklusive der { }-Klammern.

Da dachte ich mir, dass C mir hilft mit folgender Syntax:
Liest einen String aus:
Code:
DWORD dwData = 256; 
BYTE cDaten[256] = ""; 
RegQueryValueEx(hKey,"EintragsName",0,0,cDaten,&dwData2);

Aber den EintragsNamen weiß ich ja gar nicht, da unter Products ja der Ordner wie die ID lautet, welche ich suche.

Hoffe jemand kann mir weiterhelfen:)
 
Zuletzt bearbeitet:
Hi.

Code:
setlocal enabledelayedexpansion

for /f "usebackq" %%i in (`reg query hkcr\installer\products`) do (
  if not "%%i"=="" (
    for /f "usebackq tokens=2*" %%u in (`reg query "%%i" /v ProductIcon 2^>nul ^| findstr /i ProductIcon ^| findstr /i Opera`) do (
       set id=%%~dpv
       set id=!id:*{=!
       set id=!id:~0,-2!

       echo.!id!
    )
  )
)
Aber wäre es nicht sinnvoller direkt den UninstallString unterhalb von HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ zu extrahieren?

Gruß
 
Danke, habe das Script bestimmt 3 mal gelesen, bevor ich verstand was du da gemacht hast, wunderbar vielen Dank :)

Ja natürlich der String ist öfter in der Registry enthalten unter deinem Pfad nicht ganz, eher hier:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{18E65799-76BD-46EF-9E53-972FE5A40736}

Letztendlich ist es doch egal oder?
 
Zurück