Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#20

AW: CMD mit Output

  Alt 24. Mär 2019, 18:13
Hmmm..


Handelt es sich bei deiner Applikation um eine 32 Bit?
Denn dann liest du auf einem 64 Bit Windows bei deiner Reg-Abfrage nicht aus
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion

sondern durch das Redireckt von Windows aus
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\ Windows NT\CurrentVersion

Dort ist das 'InstallDate' dann '0' und somit der 1.1.1970...

Um aus einer 32 Bit App auf den 64 Bit Pfad zuzugreifen musst Du 'KEY_WOW64_64KEY' beim

Reg := TRegistry.Create(KEY_WOW64_64KEY or KEY_ALL_ACCESS);

Verwenden, dann wird auch aus eine 32 Bit App auf 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' zugegriffen.

Hier mal ein Beispiel:

Delphi-Quellcode:
uses
  Registry, DateUtils;

const
 KEY_WOW64_64KEY = $0100;
 KEY_WOW64_32KEY = $0200;

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  tmpInstallDate : Cardinal;
begin
  Reg := TRegistry.Create(KEY_WOW64_64KEY or KEY_ALL_ACCESS);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\Microsoft\Windows NT\CurrentVersion', False) then
    begin
      tmpInstallDate := Reg.ReadInteger('InstallDate');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
  Edit1.Text := DateTimeToStr(UnixToDateTime(tmpInstallDate));
end;

'CurrentVersion' hingegen ist in beiden Zweigen identisch..
  Mit Zitat antworten Zitat