Hallo,
hat schon jemand Erfahrung mit einem unterschiedlichen Exception-Handling unter Windows Server 2008 gemacht?
Offensichtlich gibt es da ein paar Unterschiede.
In der Init-Routine einer DLL prüfe ich u.a., ob der Zugriff auf einen COM-Server besteht. Der Code sieht vereinfacht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function DvExists : boolean; var DvAPI : Variant; begin result := true; try DvAPI := CreateOleObject('DVOBJAPILib.DvISEAPI'); except result := false; end; end; |
Eigentlich recht simpel, hat bisher auch immer funktioniert (auch unter Windows Server 2003, Vista, etc.). Unter Windows Server 2008 habe ich jetzt aber dass Phänomen, dass das Programm, wenn eine Exception auftritt (weil die Zeichenklassenfolge nicht registriert ist), nicht in den Except-Block springt, sondern eine Zugriffsverletzung ausgelöst wird was in dem Fall zum Absturz des ganzen Programms führt.
Ich habe den Code versuchsweise von Delphi 7 nach 2006 portiert (ist schon ein etwas älteres Projekt), das Resultat war aber das Gleiche.
Bisher habe ich dazu nirgends einen Hinweis gefunden, nur einen Workaround:
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\DisableExceptionChainValidation" auf 1 setzen, danach Windows-Neustart.
Das hilft zwar, ist aber doch etwas unschön.
Kennt hier jemand eine Lösung oder weiß jemand, ob das Problem bei Delphi 2009 behoben ist?
Vielen Dank für Eure Hinweise!
Gruß footstep