AW: Probleme beim Auslesen von Registry Keys
Warum keine gescheite Fehlerbehandlung?
Delphi-Quellcode:
Damit weißt du so viel wie vorher. RaiseLastOSError gibt dir eine gescheite Fehlermeldung aus, womit du auch was anfangen kannst.
MessageDlg('Could not open Registry Key!', mtError, [mbOK], 0);
|
AW: Probleme beim Auslesen von Registry Keys
Zitat:
Delphi-Quellcode:
und erhält eine ganz wunderbare Fehlermeldung.
RaiseLastOSError( regKey.LastError, sLineBreak + RegKeyStr );
Und wenn kein erfolgreicher OpenKey(ReadOnly), dann braucht es auch keinen CloseKey. |
AW: Probleme beim Auslesen von Registry Keys
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. |
AW: Probleme beim Auslesen von Registry Keys
Zitat:
Zitat:
Delphi-Quellcode:
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".
TRegistry
Sinnvoll ist hier auch ein ClassHelper
Delphi-Quellcode:
Und dann sieht das so aus
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;
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; |
AW: Probleme beim Auslesen von Registry Keys
Nun ja. Mit meinem Delphi kann ich von Helper Functions nur träumen. :?
|
AW: Probleme beim Auslesen von Registry Keys
Zitat:
|
AW: Probleme beim Auslesen von Registry Keys
Zitat:
Code:
//Autor GunSmoker
resourcestring SMsgOSError = '%s' + sLineBreak + 'System Error. Code: %d.' + sLineBreak + '%s'; SMsgUnkOSError = '%s' + sLineBreak + 'A call to an OS function failed'; procedure RaiseLastOSError(LastError: Integer; const AMsg: String); overload; var Error: EOSError; begin if AMsg = '' then RaiseLastOSError(LastError); if LastError <> 0 then Error := EOSError.CreateResFmt(@SMsgOSError, [AMsg, LastError, SysErrorMessage(LastError)]) else Error := EOSError.CreateResFmt(@SMsgUnkOSError, [AMsg]); Error.ErrorCode := LastError; raise Error; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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