Autor Beitrag
footstep78
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 26.09.08 15:59 
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:
ausblenden 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
jome
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29

Win 2000, XP, VISTA, WIN 7
Delphi 4,5, 2006 Pro., 2007 Pro., Delphi XE
BeitragVerfasst: So 28.09.08 14:39 
Test mal, ob die Function ProgIDToClassID('DVOBJAPILib.DvISEAPI') vorweg eine abfangbare Exception auslöst. Wenn ja, dann reagiere vor dem Aufruf Deiner CreateOleObject Funktion entsprechend.

Gruß
Jome