Hallo!
Ich habe hier ein merkwürdiges und ziemlich nerviges Problem mit dem Befehl ShellExecuteEx. Die Implementierung sieht folgendermaßen aus:
Delphi-Quellcode:
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;
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).
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