AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi External execption EEFFACE bei ShellExecuteEx
Thema durchsuchen
Ansicht
Themen-Optionen

External execption EEFFACE bei ShellExecuteEx

Ein Thema von gkoeder · begonnen am 24. Sep 2008 · letzter Beitrag vom 2. Okt 2008
Antwort Antwort
gkoeder

Registriert seit: 15. Jun 2004
84 Beiträge
 
Delphi 2010 Professional
 
#1

External execption EEFFACE bei ShellExecuteEx

  Alt 24. Sep 2008, 11:12
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
  Mit Zitat antworten Zitat
Fuchtel

Registriert seit: 9. Nov 2005
Ort: Bamberg
55 Beiträge
 
Delphi 2005 Personal
 
#2

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 24. Sep 2008, 11:20
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
  Mit Zitat antworten Zitat
gkoeder

Registriert seit: 15. Jun 2004
84 Beiträge
 
Delphi 2010 Professional
 
#3

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 24. Sep 2008, 11:26
Zitat von Fuchtel:
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
Da sollte es keine Probleme geben. Ich hab vorzugsweise Textdateien getestet. Die werden mit dem Notepad bzw. emEditor geöffnet. Beides sind Programme, die im Usercontext eigentlich problemlos funktionieren.
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#4

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 24. Sep 2008, 11:31
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
gkoeder

Registriert seit: 15. Jun 2004
84 Beiträge
 
Delphi 2010 Professional
 
#5

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 24. Sep 2008, 12:04
Die erste Version der Funktion sah folgendermaßen aus:

Delphi-Quellcode:
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;
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

Gruß
Gerald
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#6

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 25. Sep 2008, 08:49
Zitat von gkoeder:
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).
Bei Exceptions vom Typ "External Exception EEFFACE" handelt es sich um C++-Exceptions aus C++Builder, die Delphi nicht kennt und daher auch nicht angemessen behandeln kann. Einige Teile der IDE, AFAIK auch wesentliche Teile des Debuggers sowie die beiden Compiler, sind in C und C++ geschrieben; das dürfte zumindest die Herkunft der Exception begründen.

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.
Moritz
  Mit Zitat antworten Zitat
gkoeder

Registriert seit: 15. Jun 2004
84 Beiträge
 
Delphi 2010 Professional
 
#7

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 26. Sep 2008, 13:18
Zitat von DMW:
...
Einstweilen teste doch mal, ob die Option "Debug spawned processes" (irgendwo in "Tools|Debugger Options") etwas ändert.
Danke für den Tipp! Ich schau mal, ob ich so dem Problem auf die schliche komme.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#8

Re: External execption EEFFACE bei ShellExecuteEx

  Alt 2. Okt 2008, 12:57
Zitat von DMW:
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.
Eine etwas ausführlichere Behandlung des Themas findest du nun hier.
Moritz
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:39 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