Ab welcher Version gibt es denn die Methode?
Und warum sollte ein Aufruf von RaiseLastOSError zu Problemen führen? Mit deiner Begründung dürfte man die Funktion nie aufrufen, egal in was für einen Code.
Nun schauen wir an, was die
Doku dazu sagt:
Zitat:
You should call the GetLastError function immediately when a function's return value indicates that such a call will return useful data. That is because some functions call SetLastError with a zero when they succeed, wiping out the error code set by the most recently failed function.
Und ohne eine genaue Analyse der Klasse
TRegistry
kann man nicht sagen, was da noch für
API-Calls ausgeführt werden. Somit wäre das ein Fall von "kann funktionieren, muss aber nicht und vor allem kann irgendwann dann mal gar nicht mehr funktionieren".
Sinnvoll ist hier auch ein ClassHelper
Delphi-Quellcode:
interface
uses
System.Win.Registry;
type
HRegistry = class helper for TRegistry
procedure ThrowLastError( const AdditionalInfo: string = '' );
procedure OpenKeySafe( const Key: string; CanCreate: Boolean );
procedure OpenKeyReadOnlySafe( const Key: string );
end;
implementation
uses
System.StrUtils,
System.SysUtils;
{ HRegistry }
procedure HRegistry.OpenKeyReadOnlySafe( const Key: string );
begin
if not OpenKeyReadOnly( Key )
then
ThrowLastError( Key );
end;
procedure HRegistry.OpenKeySafe( const Key: string; CanCreate: Boolean );
begin
if not OpenKey( Key, CanCreate )
then
ThrowLastError( Key );
end;
procedure HRegistry.ThrowLastError( const AdditionalInfo: string );
begin
if AdditionalInfo = ''
then
RaiseLastOSError( LastError )
else
RaiseLastOSError( LastError, sLineBreak + AdditionalInfo );
end;
Und dann sieht das so aus
Delphi-Quellcode:
procedure TForm1.Button30Click(Sender: TObject);
var
regKey : TRegistry;
begin
regKey := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
Try
regKey.RootKey := HKEY_LOCAL_MACHINE;
regKey.OpenKeyReadOnlySafe('SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update');
try
ShowMessage( regKey.ReadString( 'NextDetectionTime' ) );
finally
regKey.CloseKey();
end;
Finally
regKey.Free;
End;
end;