[Gelöst] WshShellL.RegRead wenn Name nicht existiert?

13. Mai 2009 20:54

Guten Abend,

ich versuche verzweifelt, über den folgenden Befehl herauszufinden, ob eine Software installiert ist oder nicht:

Code:
fncCheckWindreamRegG() parChckWDRegOKL : Boolean

parChckWDRegOKL := (fncRegReadG('HKEY_LOCAL_MACHINE\SOFTWARE\A.I.S. GmbH\windream\','CurrentVersion') <> '');

fncRegReadG(Path : Text[250];Key : Text[250]) : Text[1024]
IF ISCLEAR(WshShellL) THEN
  CREATE(WshShellL);
EXIT(FORMAT(WshShellL.RegRead(fncCreateFullKeyG(Path,Key))));

fncCreateFullKeyG(Path : Text[250];Key : Text[250]) : Text[1024]
IF STRPOS(UPPERCASE(Path),'HKEY_CURRENT_USER') +
   STRPOS(UPPERCASE(Path),'HKEY_LOCAL_MACHINE') +
   STRPOS(UPPERCASE(Path),'HKEY_CLASSES_ROOT') +
   STRPOS(UPPERCASE(Path),'HKEY_USERS') +
   STRPOS(UPPERCASE(Path),'HKEY_CURRENT_CONFIG') = 0
THEN
  ERROR('Unknown root key name');

EXIT(DELCHR(Path,'>','\') + '\' + Key);


DenCode habe ich aus der Toolbox kopiert.

Ist die entsprechende Software installiert, erhalte ich ein TRUE als Wert zurück. Der Wert in "CurrentVersion" ist dann z.B. 3.6.
Ist die entsprechende Software aber nicht installiert (es gibt keinen Eintrag "A.I.S GmbH\windream\..."), erhalte ich einen Absturz.
Wie kann ich dies verhindern? Ich möchte nur prüfen, ob eine Software auf dem Client/PC installiert ist oder nicht. Fall sie installiert ist, gebe ich gewisse Funktionen frei. Ist sie nicht installiert sind diese Funktionen gesperrt.

VIELEN DANK, Beno
Zuletzt geändert von beno am 19. Mai 2009 07:53, insgesamt 1-mal geändert.

Re: WshShellL.RegRead wenn Name nicht existiert?

13. Mai 2009 21:12

Hiho Beno,

ein Tipp ins Blaue: Wenn WinDream nicht installiert ist, ist wahrscheinlich gar kein Produkt der "A.I.S. GmbH" installiert, demnach fehlen eventuell auch die Pfade dahin. Ich würde die Prüfroutine so umbauen, dass der gesamte Pfad Schritt für Schritt geprüft wird. Sprich erst SOFTWARE, dann "SOFTWARE/A.I.S. GmbH", dann "SOFTWARE/A.I.S. GmbH/windream". Wenn du gar nicht bis zum Ende des angegebenen Pfades kommst, ist auch die Software nicht installiert. Version quasi 0.0.

Re: WshShellL.RegRead wenn Name nicht existiert?

14. Mai 2009 08:07

Hallo Carsten,

vielen Dank für Deine Antwort. Das Problem ist vielleicht tatsächlich, dass ich zuviel auf einmal wollte...

Aber wie prüfe ich ohne Absturz, ob z.B. 'HKEY_LOCAL_MACHINE\SOFTWARE' respektive 'HKEY_LOCAL_MACHINE\SOFTWARE\A.I.S. GmbH' vorhanden ist?
Gebe ich da einfach keinen Key mit wie z.B.:
fncRegReadG('HKEY_LOCAL_MACHINE\SOFTWARE\','') oder
fncRegReadG('HKEY_LOCAL_MACHINE\SOFTWARE\A.I.S. GmbH\,'')

Der Eintrag 'HKEY_LOCAL_MACHINE\SOFTWARE' wird ja sicher vorhanden sein. Der Eintrag 'HKEY_LOCAL_MACHINE\SOFTWARE\A.I.S. GmbH' kann aber je nach Client fehlen.
Erhalte ich da jeweils irgend einen Return Code zurück oder wie fange ich einen weiteren Absturz ab?

Nochmals vielen Dank, Beno

WshShellL.RegRead wenn Name nicht existiert?

19. Mai 2009 07:51

Hallo zusammen,
Die Lösung ist (wie fast immer) ziemlich einfach. Man muss eine eigene Codeunit verwenden, welche dann mit "IF MyCodeunit.RUN THEN" aufgerufen wird. Damit werden allfällige Fehler beim Lesen der Registry (z.B. wenn der Eintrag eben nicht vorhanden ist) abgefangen. Wie dies realisiert wird und wie die Parameter übergeben und wieder geholt werden, kann unter dem folgenden Mibuso-Link nachgelesen werden: http://www.mibuso.com/forum/viewtopic.php?f=23&t=34325
Ich wünsche allen einen schönen und sonnigen Tag, Beno