Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Registry: 2 OpenKeys, nur der 1. funktioniert, warum? (https://www.delphipraxis.net/174588-registry-2-openkeys-nur-der-1-funktioniert-warum.html)

Piro 30. Apr 2013 14:13

Betriebssystem: Win XP,Win 7

Registry: 2 OpenKeys, nur der 1. funktioniert, warum?
 
Schönen guten Tag,

ich versuche mit dem unten dargestellten Code, den Virenscanner von Symantec (SAV oder SEP) zu ermitteln. Wir haben nur Windows XP und 7 64bit im Einsatz.

Getestet habe ich auf meinem Windows 7 64bit Rechner. Die ersten beiden Keys existieren und ich würde erwarten, dass er in beide Ifs hineingeht.
Das 1. If macht er super aber dann ignoriert er alles was danach kommt, obwohl es existiert. Bin mit meinem Latein am Ende.
Delphi-Quellcode:
function GetSAVParentServer : String;
var
 av_name, av_parentserver, sResult : String;
 reg : TRegistry;
begin
 av_name := '';
 av_parentserver := '';
 Result := '';

 reg := TRegistry.Create(KEY_READ);
 with reg do
 begin
   Rootkey:=HKEY_LOCAL_MACHINE;

   // SEP
   if OpenKey('SOFTWARE\Symantec\Symantec Endpoint Protection\SMC', False) then
   begin
     try
       if ValueExists('ProductVersion') then
         if ReadString('ProductVersion') <> '' then
           av_name := 'SEP';
     except
       av_name := '';
     end;
     CloseKey;
   end;

   // SEP : Parent Server
   if OpenKey('SOFTWARE\Symantec\Symantec Endpoint Protection\SMC\SYLINK\SyLink', False) then
   begin
     try
       av_parentserver := ReadString('LastServerIP');
     except
       av_parentserver := '';
     end;
     CloseKey;
   end;

   // SAV
   if (OpenKey('SOFTWARE\Symantec\InstalledApps', False)) and (av_name = '') then
   begin
     try
       if KeyExists('SAVCE') then
         if ReadString('SAVCE') <> '' then
           av_name := 'SAV';
     except
       av_name := '';
     end;
     CloseKey;
   end;

   // SAV : Parent Server
   if OpenKey('SOFTWARE\Intel\LANDesk\VirusProtect6\CurrentVersion', False) then
   begin
     try
       av_parentserver := ReadString('Parent');
     except
       av_parentserver := '';
     end;
     CloseKey;
   end;
 end;
 reg.Free;

 sResult := '';
 if av_name <> '' then
   sResult := av_name;

 if sResult <> '' then
 begin
   if av_parentserver <> '' then
     sResult := sResult + ' - ' + av_parentserver;
 end
 else
   sResult := av_parentserver;

 Result := sResult;
end;
Danke im Voraus.
Sven

DeddyH 30. Apr 2013 14:27

AW: Registry: 2 OpenKeys, nur der 1. funktioniert, warum?
 
Wie ist es so?
Delphi-Quellcode:
function GetSAVParentServer : String;
var
  av_name, av_parentserver, sResult : String;
  reg : TRegistry;
begin
  av_name := '';
  av_parentserver := '';
  Result := '';
 
  reg := TRegistry.Create(KEY_READ);
  try
    reg.Rootkey := HKEY_LOCAL_MACHINE;
   
    // SEP
    if reg.OpenKey('SOFTWARE\Symantec\Symantec Endpoint Protection\SMC', False) then
     try
       if reg.ValueExists('ProductVersion') then
         if reg.ReadString('ProductVersion') <> '' then
           av_name := 'SEP';
     finally
       reg.CloseKey;
     end;
   
    // SEP : Parent Server
    if reg.OpenKey('SOFTWARE\Symantec\Symantec Endpoint Protection\SMC\SYLINK\SyLink', False) then  
     try
       av_parentserver := reg.ReadString('LastServerIP');
     finally
       reg.CloseKey;
     end;
   
    // SAV
    if reg.OpenKey('SOFTWARE\Symantec\InstalledApps', False) and (av_name = '') then
     try
       if reg.KeyExists('SAVCE') then
         if reg.ReadString('SAVCE') <> '' then
           av_name := 'SAV';
     finally
       reg.CloseKey;
     end;
   
    // SAV : Parent Server
    if reg.OpenKey('SOFTWARE\Intel\LANDesk\VirusProtect6\CurrentVersion', False) then
     try
       av_parentserver := reg.ReadString('Parent');
     finally
       reg.CloseKey;
     end;
     
  finally
    reg.Free;
  end;
 
  sResult := '';
  if av_name <> '' then
    sResult := av_name;
 
  if sResult <> '' then
  begin
    if av_parentserver <> '' then
      sResult := sResult + ' - ' + av_parentserver;
  end
  else
    sResult := av_parentserver;
 
  Result := sResult;
end;

Piro 30. Apr 2013 15:13

AW: Registry: 2 OpenKeys, nur der 1. funktioniert, warum?
 
Das brachte keinen Erfolg.

Ich habe es so gelöst.
Delphi-Quellcode:
 // 32bit oder 64bit Lese Zugriff setzen
 if GetOSArchitecture = '32-Bit' then
   reg := TRegistry.Create(KEY_READ OR KEY_WOW64_32KEY)
 else
   reg := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
Kannte das Problem von einer anderen Aufgabenstellung. Mit 64bit Systemen ist etwas komplizierter.

Wenn einer noch eine andere Lösung. Würde Sie mich sehr interessieren.

Danke.

DeddyH 30. Apr 2013 15:19

AW: Registry: 2 OpenKeys, nur der 1. funktioniert, warum?
 
Vielleicht interessant in dem Zusammenhang (auch mal den Links folgen): http://www.delphipraxis.net/86651-re...w6432node.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz