AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

try ... except --> wann verwenden ???

Ein Thema von Christian18 · begonnen am 1. Aug 2007 · letzter Beitrag vom 2. Aug 2007
Antwort Antwort
Seite 1 von 3  1 23   
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 12:16
Hallo,

ich habe ein kleines Projekt, wo ich alle Fehler mit try ... except abfangen möchte. Nun stellt sich mir die Frage wann man es verwenden.

Wenn man nur ein Label beschriftet, dann soch sicherlich nicht oder? Wann verwendet Ihr try ... except???

MFG Chris
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 12:22
Hallo,

ich würde es da nutzen, wo Fehleingaben vom Benutzer Fehler verursachen würden bzw. allgemein da, wo Fehler leicht auftreten können. Wenn möglich solltest du jedoch try-except weitmöglich umgehen und lieber per if-Abfragen prüfen, ob etwas funktioniert hat oder nicht, finde ich. Das ist je nach Situation natürlich unterschiedlich.
Alle Fehler abzufangen wäre ganz simpel mittels TApplicatioEvents (oder wie das genau heißt) möglich, doch Fehler nur zu unterdrücken ist nicht ratsam.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 12:25
Da gibt es einen guten Artikel: Exception Handling for Fun and Profit.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#4

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 12:45
danke,

ihr habt mir sehr geholfen. Besonders luckie xD
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:01
Delphi-Quellcode:
try
 XY;
except
end;
Für solche Fälle musste ich feststellen, dass diese Art von Exceptionhandling Speicherlöcher erzeugen kann.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:27
Zitat von Dezipaitor:
Delphi-Quellcode:
try
 XY;
except
end;
Für solche Fälle musste ich feststellen, dass diese Art von Exceptionhandling Speicherlöcher erzeugen kann.
Das hängt davon ab was XY ist. Und wenn da ein Speicherloch entsteht liegt es daran das nach dem exceptblock wohl etwas vorher reserviertes nicht frei gegeben wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von ptown67
ptown67

Registriert seit: 31. Jan 2006
Ort: Keine Ergebnisse gefunden
60 Beiträge
 
Delphi 7 Personal
 
#7

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:31
Hier ein gutes Beispiel:

Code:
uses
  URLMon;

procedure TForm1.Button1Click(Sender: TObject);
var
  Datei,Ziel:PChar;
begin
  Label1.Caption := 'Download gestartet';
  try
    Datei := 'http://www.DieSeite/DieDatei.zip';
    Ziel := 'C:\Windows\Desktop\DieDatei.zip';
    UrlDownloadToFile(nil, Datei, Ziel, 0, nil);
    Label1.Caption := 'Download beendet';
  except
    showmessage('Download abgebrochen');
  end;
end;
Gruß Freeman
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:33
Gerade das ist ein schlechtes Beispiel, weil API-Funktionen in der Regel keine Exceptions werfen. Zu dem hat UrlDownloadToFile einen Rückgabewert, den man auswerten kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:51
So ich hab mal ein Beispiel für Exception (ob gut oder schlecht?)

Delphi-Quellcode:

 {@Name function generates an audit message in the security event log.
        For a detailed information see MSDN : [url]http://msdn2.microsoft.com/en-gb/library/aa379305.aspx[/url]

        If you want to enable audit functions the calling process (not thread token!) needs the SeAuditPrivilege privilege.
        Per default only services have this privilege. However it can be enabled in group policy editor : "gpedit.msc" manager (under xp)
          Computer configuration -> Windows settings -> security settings -> local policies -> audit policy
            enable (success/failure) policy : audit privilege
          The parameter AccessGranted is linked with the type of policy - success or failiure.
          ([url]http://www.nemesisblue.info/images%5Cgpedit1.gif[/url])

        The audit event can be seen in the event viewer in security leaf.

        @param(ClientToken is the token to be used in audit log. )

        @raises(ESMPrivilegeNotFoundException will be raised if the process token does not have the privilege : SE_AUDIT_NAME)
        @raises(ESMWinCallFailedException will be raised if the winapi call to PrivilegedServiceAuditAlarm failed.)
        @raises(ESMInvalidTokenHandle will be raised if the parameter ClientToken is nil)
         }

class procedure TSecurityToken.PrivilegedServiceAuditAlarm(SubsystemName, ServiceName : TString; ClientToken : TSecurityToken;
                                        Privileges : TPrivilegeSet; AccessGranted :Boolean);


var pPriv : JwaWinNT.PPRIVILEGE_SET;
    privs : TPrivilegeSet;

    primToken : TSecurityToken;
    bOldAuditPriv : Boolean;
begin
  if not Assigned(ClientToken) then
    raise ESMInvalidTokenHandle.CreateFmtEx('ClientToken must not be nil.', 'PrivilegedServiceAuditAlarm',ClassName,'USM_Token.pas', 0,true,[]);


  {PrivilegedServiceAuditAlarm checks the process token for the needed privilege SE_AUDIT_NAME.
  So we open it here.
  The thread that calls this function does not need that privilege.

  We open the token with minimal access.

  }

  primToken := TSecurityToken.CreateTokenByProcess(0,
                TOKEN_READ or
                TOKEN_QUERY or
                TOKEN_ADJUST_PRIVILEGES or
                TOKEN_AUDIT_SUCCESS_INCLUDE or TOKEN_AUDIT_SUCCESS_EXCLUDE or
                TOKEN_AUDIT_FAILURE_INCLUDE or TOKEN_AUDIT_FAILURE_EXCLUDE);

  {first we try to get status of SE_AUDIT_NAME privilege.
  Maybe the process has not the privilege?

  We save the privilege status for later resetting.
  }

  try
    bOldAuditPriv := primToken.PrivilegeEnabled[SE_AUDIT_NAME];
  except
    on E1 : ESMPrivilegeNotFoundException do
    begin
      //do special things here - for future
      primToken.Free;
      raise; //notify caller
    end;

    On E2 : Exception do
    begin
      //free in every case
      primToken.Free;
      raise; //but re-raise
    end;
  end;

  //not enable privilege
  primToken.PrivilegeEnabled[SE_AUDIT_NAME] := true;

  //now we set all privileges of the client token, so they will be shown in the audit log message
  privs := ClientToken.GetTokenPrivileges;
  pPriv := privs.Create_PPRIVILEGE_SET;

  if not {$IFDEF SM_UNICODE}PrivilegedServiceAuditAlarmW{$ELSE}PrivilegedServiceAuditAlarmA{$ENDIF}
        (TPChar(SubsystemName), TPChar(ServiceName), ClientToken.TokenHandle,pPriv^, AccessGranted) then
  begin
    //reset privilege to old status
    //free everything before raise exception
    primToken.PrivilegeEnabled[SE_AUDIT_NAME] := bOldAuditPriv;
    privs.Free_PPRIVILEGE_SET(pPriv);
    privs.Free;
    //free token
    primToken.Free;
    raise ESMWinCallFailedException.CreateFmtEx('Call to PrivilegeCheck failed.', 'PrivilegedServiceAuditAlarm',ClassName,'USM_Token.pas', 0,true,[]);
  end;

  //reset privilege to old status
  primToken.PrivilegeEnabled[SE_AUDIT_NAME] := bOldAuditPriv;
  privs.Free_PPRIVILEGE_SET(pPriv);
  privs.Free;
  //free token
  primToken.Free;
end;
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:55
Dein primToken wird im Falle eines Fehlers in der Methode nicht freigegeben. Da gehört noch ein try-finally-Block drumrum.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 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