Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Registry-Schlüssel für Installationsdatum unter Vista (https://www.delphipraxis.net/92865-registry-schluessel-fuer-installationsdatum-unter-vista.html)

Mazel 27. Mai 2007 21:46


Registry-Schlüssel für Installationsdatum unter Vista
 
Hallo,

ich suche den Registry-Schüssel für das Datum der Windowsinstallation unter Vista.
WinNT < 6.0:
Delphi-Quellcode:
// Schlüssel
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
  InstallDate
Win9x:
Delphi-Quellcode:
// Schlüssel
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\
  FirstInstallDateTime
Wie lautet er aber unter Vista? Um das Datum zu ermitteln habe ich ein Code gefunden, den etwas bearbeitet und es scheint nur "nicht" auf Vista zu funktionieren, deshalb nehme ich an, dass das entweder nicht mehr so möglich oder ein anderer Schlüssel ist. Ein Freund hat es geteste und es kam als Ergebnis 1.1.1970.

Gruß
Mazel

MagicAndre1981 28. Mai 2007 08:42

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Unter Vista heißt der auch InstallDate und ist eine Reg_DWORD

Mazel 28. Mai 2007 09:58

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Mhm, wieso funktioniert das dann aber nicht auf seinem Rechner? Wenn es der selbe Schlüssel ist, sollte das doch gehen? Kann es sein, dass der Wert nicht stimmt?
Dann werde ich ihn mal nach dem DWORD-Wert fragen und dein bei mir einsetzen.

alcaeus 28. Mai 2007 10:02

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Greifst du auch nur lesend auf den Registry-Key zu? Ansonsten koenntest du wohl UAC-verbundene Schwierigkeiten kriegen ;)

Greetz
alcaeus

Mazel 28. Mai 2007 10:04

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Ja, nur lesend:
Delphi-Quellcode:
CURRENT_VERSION_NT      = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\';
CURRENT_VERSION_32       = 'SOFTWARE\Microsoft\Windows\CurrentVersion\';
...
RootKey := HKEY_LOCAL_MACHINE;
if WinNT then Reg.OpenKeyReadOnly(CURRENT_VERSION_NT)
else Reg.OpenKeyReadOnly(CURRENT_VERSION_32);
...

Bernhard Geyer 28. Mai 2007 11:39

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Hast du auch schon mal mit Regedit kontroliert was da drin steht?

RWarnecke 28. Mai 2007 11:46

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Hallo Marcel,

probiere mal folgendes : (wie immer alles ohne Gewähr)
Delphi-Quellcode:
  If isWinNT Then
    regKey:= 'SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION';
  If isWIN9x Then
    regKey:= 'SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION';
  Reg:= TRegistry.Create;
  Reg.RootKey:= HKEY_LOCAL_MACHINE;
  If Reg.OpenKeyReadOnly( regKey ) Then
  Begin
    If isWINNT Then regBuf:= 'InstallDate'
    Else
    If isWIN9x Then regBuf:= 'FirstInstallDateTime'
    Else regKey:= '';


    If (regKey <> '') Then
    Begin
      If reg.ValueExists(regBuf) Then
      Begin
        dType:= reg.GetDataType(regBuf);

        Case dType Of
          rdInteger : Begin
                        If isWINNT Then Result.InstallDate:= ctime2datetime( reg.ReadInteger(regBuf) );
                        If isWin9x Then Result.InstallDate:= FormatDateTime('dd.mm.yyyy', FileDateToDateTime(reg.ReadInteger('FirstInstallDateTime')));
                      End;
          rdBinary : Begin
                        reg.ReadBinaryData( regBuf, wBuf, SizeOf(wBuf) );
                        If isWINNT Then Result.InstallDate:= ctime2datetime( wBuf );
                        If isWin9x Then Result.InstallDate:= FormatDateTime('dd.mm.yyyy', FileDateToDateTime(wBuf));
                      End;
        End;
      End;
    End;
  End;
Mit dem isWinNT und dem isWin9x, prüfe ich ab um welches Betriebsystem es sich handelt. Dieses musst Du natürlich durch deine Abprüfung ersetzen.

Dazu brauchst Du natürlich noch diese Funktion :
Delphi-Quellcode:
function ctime2datetime(givenTime: Double): string;
var DateTime: TDateTime;
  TimeZoneInformation: TTimeZoneInformation;
begin
  GetTimeZoneInformation(TimeZoneInformation);
  DateTime:= EncodeDate( 1970, 1, 1 )+(givenTime/86400)-((TimeZoneInformation.Bias+TimeZoneInformation.daylightBias)/1440);
  Result:= FormatDateTime('dd.mm.yyyy', DateTime);
end;
Diese Variante funktioniert unter W2k, W2k3 und Vista.

Mazel 28. Mai 2007 12:45

Re: Registry-Schlüssel für Installationsdatum unter Vista
 
Danke, der Code scheint der zu sein den ich gefunden habe, hier mal meine abgeänderte Variante die aber wie gesagt unter Windows XP funktioniert:
Delphi-Quellcode:
Reg := TRegistry.Create(KEY_READ);
 with Reg do
  try
   RootKey := HKEY_LOCAL_MACHINE;
   if WinNT then Reg.OpenKeyReadOnly(CURRENT_VERSION_NT)
   else Reg.OpenKeyReadOnly(CURRENT_VERSION_32);
   if not WinNT then
    begin
     if GetDataType('FirstInstallDateTime') = rdInteger then Buf := DWORD(ReadInteger('FirstInstallDateTime'))
     else ReadBinaryData('FirstInstallDateTime', Buf, SizeOf(Buf));
     VersionInfo.InstallDate := FormatDateTime('dd.mm.yyyy hh:nn:ss "Uhr"', FileDateToDateTime(Buf));
    end
   else
    begin
     if GetDataType('InstallDate') = rdInteger then Buf := DWORD(ReadInteger('InstallDate'))
     else ReadBinaryData('InstallDate', Buf, SizeOf(Buf));
     VersionInfo.InstallDate := FormatDateTime('dd.mm.yyyy hh:nn:ss "Uhr"', EncodeDate(1970, 1, 1) + (Buf / SecsPerDay));
    end;
  finally
   Reg.Free;
  end;
@Bernhard Geyer:
Ja also unter XP gibts InstallDate aber da ich kein Vista habe, bin ich auch andere mit Vista angewiesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 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