Regkey auslesen mit GetUninstallKeyName

Post Reply
Yilmaz
Posts: 198
Joined: 27. Jun 2016, 12:40
Contact:

Regkey auslesen mit GetUninstallKeyName

Post by Yilmaz » 28. Jul 2020, 14:05

Hallo zusammen,

ich bin dabei ein Paket zu erstellen das vorher die Registry nach dem Displaynamen prüft und sollte das existieren einen Reinstall manchen ansonsten halt eine komplett Installation.

[Set Product]

Code: Select all

Set V_MSIGUID = GetUninstallKeyName("%V_MSIDisplayName%*", "%V_MSIArch%")
If "%V_MSIGUID%" == "" Then "InstallMSI" Else "RepairMSI" EndIf

[InstallMSI]
Call MsiExec /I "%Src%\%VM_SourceDir%\%V_MSIFileName%"  /q /Li "%MSILogFile%"
If "%Errorlevel%" == "3010" Then "RebootRequired" EndIf
Sleep 3000
Set V_MSIGUID = GetUninstallKeyName("%V_MSIDisplayName%*", "%V_MSIArch%")
If "%V_MSIGUID%" == "" Then "AbortMSI" EndIf

Leider findet er nichts und versucht eine komplett Installation und bricht mit einer Fehlermeldung ab nach erneuter Prüfung des Regkeys. Obwohl das Programm installiert ist.
In der Registry wird der Uninstallstring angezeigt.

Kann mir einer dazu einen Hinweis geben was falsch ist ?
Gruss
Yilmaz
2nd-Level Support

Yilmaz
Posts: 198
Joined: 27. Jun 2016, 12:40
Contact:

Re: Regkey auslesen mit GetUninstallKeyName

Post by Yilmaz » 29. Jul 2020, 14:18

Wie kann ich das eingrenzen das nur in HKLM nach dem Wert gesucht wird?

Anscheinend wird gar nicht gesucht und somit fährt die Installation gegen die Wand.

Habe zwar diesen
Post im Forum gefunden aber das funktioniert leider auch nicht bei mir :-(

Der Gedanke ist das bei MSI Paketen ist die GUID nicht immer bekannt, da mal ohne Empirum installiert wurde und nur PackageName bekannt ist und somit ein Update ohne viel suchen erfolgen könnte.
Gruss
Yilmaz
2nd-Level Support

User avatar
Frank Dethlefsen
Posts: 521
Joined: 06. Apr 2006, 22:01
Location: Bochum
Contact:

Re: Regkey auslesen mit GetUninstallKeyName

Post by Frank Dethlefsen » 29. Jul 2020, 21:06

Moin!

Vielleicht passt die Platform-Option in der Setup.inf nicht zur %V_MSIArch%?
Vielleicht auch mal beim DisplayName mit Platzhalter * vorne bzw. hinten ausprobieren?
Hier noch mal die Hilfe:

------------------------------------------------------------------------------------------------------------------
GetUninstallKeyName ("<DisplayName>", "<RegistryViewFlag>")

Ermittelt den Registrierungsschlüssel, mit dem ein Paket mit dem übergebenen String <DisplayName> unterhalb des Schlüssels "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" in der Registrierungsdatenbank eingetragen ist. Der Platzhalter * ist am Anfang und am Ende des Suchbegriffes erlaubt.

Der zweite Parameter <RegistryViewFlag> bestimmt auf einem 64 Bit Betriebssystem, ob im 32 Bit oder 64 Bit Bereich der Registrierungsdatenbank gesucht werden soll. Auf 32 Bit Betriebssystemen wird das Flag ignoriert. Wenn dieser Parameter leer ist, wird die Plattform der ausführenden Setup.exe verwendet.

Die Funktion gibt einen String mit dem ersten gefundenen Schlüssel oder einen leeren String zurück.

Mit dem ermittelten Schlüssel kann man beispielsweise eine universelle Deinstallation von MSI Paketen erreichen, selbst wenn deren MSI GUID durch Updates geändert wurden.

Beispiel:

Der DisplayName im Uninstall Registry Schlüssel lautet "Adobe Reader XI (11.0.08)"

Set GUID = GetUninstallKeyName("Adobe Reader*", "x86")

Echo %GUID%

Rem Ergebnis "{AC76BA86-7AD7-1031-7B44-AB0000000001}"
------------------------------------------------------------------------------------------------------------------
:roll:
Frank Dethlefsen
Consultant und Coach
UPDATENOW GmbH
Frank.Dethlefsen@updatenow.de
https://empirum.blogspot.de/

Yilmaz
Posts: 198
Joined: 27. Jun 2016, 12:40
Contact:

Re: Regkey auslesen mit GetUninstallKeyName

Post by Yilmaz » 25. Jan 2021, 10:51

Hallo Herr Dethlefsen,

wie ist es aber wenn der RegKeyName (Displayname) nicht HKLM sondern HKCU nur zufinden ist.
wird auch dann in dem Zweig gesucht oder nur HKLM\software\...\Uninstall\.. mit GeuUnstallKeyName?

Ich habe ein Paket das kein Registry Schlüssel in HKLM sondern nur unter HKCU\Software..\Uninstall abgelegt hat.
Gruss
Yilmaz
2nd-Level Support

User avatar
Frank Dethlefsen
Posts: 521
Joined: 06. Apr 2006, 22:01
Location: Bochum
Contact:

Re: Regkey auslesen mit GetUninstallKeyName

Post by Frank Dethlefsen » 25. Jan 2021, 11:06

Moin!

Der Befehl GetUninstallKeyName gilt nur für HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall bzw. HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall. Siehe unten Online-Hilfe. Wenn nötig müsste man da wohl selbst etwas basteln per Powershell, VBS oder AutoIt.

GetUninstallKeyName ("<DisplayName>", "<RegistryViewFlag>")

Ermittelt den Registrierungsschlüssel, mit dem ein Paket mit dem übergebenen String <DisplayName> unterhalb des Schlüssels "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" in der Registrierungsdatenbank eingetragen ist. Der Platzhalter * ist am Anfang und am Ende des Suchbegriffes erlaubt.

Der zweite Parameter <RegistryViewFlag> bestimmt auf einem 64 Bit Betriebssystem, ob im 32 Bit oder 64 Bit Bereich der Registrierungsdatenbank gesucht werden soll. Auf 32 Bit Betriebssystemen wird das Flag ignoriert. Wenn dieser Parameter leer ist, wird die Plattform der ausführenden Setup.exe verwendet.

Die Funktion gibt einen String mit dem ersten gefundenen Schlüssel oder einen leeren String zurück.

Mit dem ermittelten Schlüssel kann man beispielsweise eine universelle Deinstallation von MSI Paketen erreichen, selbst wenn deren MSI GUID durch Updates geändert wurden.

Beispiel:

Der DisplayName im Uninstall Registry Schlüssel lautet "Adobe Reader XI (11.0.08)"

Set GUID = GetUninstallKeyName("Adobe Reader*", "x86")

Echo %GUID%

Rem Ergebnis "{AC76BA86-7AD7-1031-7B44-AB0000000001}"
Frank Dethlefsen
Consultant und Coach
UPDATENOW GmbH
Frank.Dethlefsen@updatenow.de
https://empirum.blogspot.de/

Post Reply

Return to “Paketierung”

Who is online

Users browsing this forum: No registered users and 3 guests