![]() |
External execption EEFFACE bei ShellExecuteEx
Hallo!
Ich habe hier ein merkwürdiges und ziemlich nerviges Problem mit dem Befehl ShellExecuteEx. Die Implementierung sieht folgendermaßen aus:
Delphi-Quellcode:
Wenn ich nun eine Datei mit ShellExecuteEx starte (verb 'Open', cmdShow 'SW_SHOWNORMAL'), dann fährt mir sehr häufig die komplette IDE mit einer External Exception EEFFACE an die Wand. Ich kann dann nur noch bds.exe per Taskmanager beenden und neu starten (was das debuggen natürlich knifflig macht).
function ShellExecEx(const FileName: string; const Parameters: string; const Directory: String; const Verb: string; CmdShow: Integer): Boolean;
var Info: pShellExecuteInfo; begin // Clear Info New(Info); ZeroMemory(Info, SizeOf(TShellExecuteInfo)); // Fill in the SHELLEXECUTEINFO structure try Info.cbSize := SizeOf(tShellExecuteInfo); Info.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_DOENVSUBST; Info.wnd := HWnd_Desktop; Info.lpVerb := pChar(Pointer(Verb)); Info.lpFile := pChar(FileName); Info.lpParameters := pChar(Pointer(Parameters)); Info.lpDirectory := pChar(Pointer(Directory)); Info.nShow := CmdShow;; Info.hInstApp := 0; Info.lpIDList := nil; {$T+} Result := ShellExecuteEx(Info); {$T-} if Result = False then ShowMessage(SysErrorMessage(GetLastError)); finally Dispose(Info); end; end; Ich hab die Routine in zwei Programmen im Einsatz und bei beiden hab ich das Problem - ich vermute also, dass es nicht am restlichen Programm liegt. Ebenso hab ich keine zusammenhänge bei den zu startenden Dateien erkennen können. Einmal klappt der Aufruf und ein andermal bekomme ich die Exception bei der selben Datei. Die Exception wird direkt beim ShellExecuteEx-Aufruf ausgelöst. Die Systemumgebung sieht folgendermaßen aus: Delphi 2007 Pro mit allen aktuellen Fixpacks Windows Vista Business Also ich bin ziemlich ratlos (und nachdem ich die IDE die letzten Tage zahllos abgeschossen und wieder neu gestartet hab auch ziemlich frustiert). Hat jemand eine Idee, worin der Fehler liegen kann? Gruß Gerald |
Re: External execption EEFFACE bei ShellExecuteEx
Hallo Gerald,
hat dein Aufrufendes Programm auch die Rechte, das andere zu Starten? Oder verhindert irgendein Virenschutz, Fierwall, ... das starten? Du weißt ja, Vista ist da sehr heikel! Gruß Fuchtel |
Re: External execption EEFFACE bei ShellExecuteEx
Zitat:
Den Virenkiller (Kaspersky 2009) hab ich auch testweise abgeschaltet, da dieser über ein Behaviour-Blocking verfügt und so vllt Probleme verursacht. Gebracht hat es leider nichts :-( Gruß Gerald |
Re: External execption EEFFACE bei ShellExecuteEx
Ich weiß nicht, wie weit die Compilermagic das ausgleicht, aber mal sprichst Du Info als Pointer an und mal nicht. Ich würde das mal so abändern:
Delphi-Quellcode:
function ShellExecEx(const FileName: string; const Parameters: string; const Directory: String; const Verb: string; CmdShow: Integer): Boolean;
var Info: TShellExecuteInfo; begin // Clear Info // New(Info); ZeroMemory(@Info, SizeOf(TShellExecuteInfo)); // Fill in the SHELLEXECUTEINFO structure // try Info.cbSize := SizeOf(tShellExecuteInfo); Info.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_DOENVSUBST; Info.wnd := HWnd_Desktop; Info.lpVerb := pChar(Pointer(Verb)); Info.lpFile := pChar(FileName); Info.lpParameters := pChar(Pointer(Parameters)); Info.lpDirectory := pChar(Pointer(Directory)); Info.nShow := CmdShow;; Info.hInstApp := 0; Info.lpIDList := nil; {$T+} Result := ShellExecuteEx(@Info); {$T-} if Result = False then ShowMessage(SysErrorMessage(GetLastError)); { finally Dispose(Info); end;} end; |
Re: External execption EEFFACE bei ShellExecuteEx
Die erste Version der Funktion sah folgendermaßen aus:
Delphi-Quellcode:
Aber selbst hier gibts die selbe Exception beim ShellExecuteEx :-( Ich hab gestern die Funktionen an einer zweiten Maschine unter WinXP getestet und dort scheinen sie offensichtlich zu funktionieren. In der MSDN hab ich aber keine gravierenden Neuerungen von XP zu Vista bei ShellExecuteEx gefunden
function ShellFileOpen(const aFile, aParameters, aDirectory: string): Boolean;
var Info: TShellExecuteInfo; begin // Clear Info FillChar( Info, SizeOf( TShellExecuteInfo ), #0 ); with Info do begin cbSize := SizeOf(Info); fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS; wnd := HWnd_Desktop; lpVerb := 'open'; // RunAs startet den "Ausführen als .."-Dialog lpFile := pChar(aFile); if aParameters <> '' then lpParameters := pChar(aParameters) else lpParameters := NIL; if aDirectory <> '' then lpDirectory := pChar(aDirectory) else lpDirectory := Nil; nShow := SW_SHOWNORMAL;; hInstApp := 0; lpIDList := nil; end; Result := ShellExecuteEx(@Info); End; Gruß Gerald |
Re: External execption EEFFACE bei ShellExecuteEx
Zitat:
Derzeit arbeite ich an einer Unit, die Delphi-Programme in die Lage versetzt, C++Builder-Exceptions behandeln zu können. Ich könnte dir den Entwurf mal zuschicken, und du kannst ihn als DLL-Wizard in die IDE laden, so daß du eine ordentliche Fehlermeldung bekommst. Einstweilen teste doch mal, ob die Option "Debug spawned processes" (irgendwo in "Tools|Debugger Options") etwas ändert. |
Re: External execption EEFFACE bei ShellExecuteEx
Zitat:
|
Re: External execption EEFFACE bei ShellExecuteEx
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz