Autor |
Beitrag |
realerHanno
Hält's aus hier
Beiträge: 13
Win XP
Delphi Enterprise V7.0
|
Verfasst: So 12.10.14 17:13
Hallo,
folgendes funktioniert:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(0, Nil, PChar('C:\Windows\System32\calc.exe'), Nil, Nil, SW_NORMAL); end; |
Wenn ich nur den Pfad zu einem anderen Programm ändere, geht nichts mehr:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(0, Nil, PChar('C:\RDM-TestUnit\XLoader\XLoader.exe'), Nil, Nil, SW_NORMAL); end; |
Im Anhang ein Auszug aus der hierbei offerierten Meldung
Bin ein wenig ratlos...
realerhanno
Moderiert von Narses: I- durch Delphi-Tags ersetzt
Moderiert von Narses: BMP->PNGModeriert von Narses: Topic aus Sonstiges (Delphi) verschoben am So 12.10.2014 um 22:14
Einloggen, um Attachments anzusehen!
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: So 12.10.14 17:26
Was gibt ShellExecute denn zurück?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| function ShellExecuteErrorMessage(ErrorCode: Integer): string; begin case ErrorCode of 0: Result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig'; 2: Result := 'Datei wurde nicht gefunden.'; 3: Result := 'Verzeichnis wurde nicht gefunden.'; 5: Result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.'; 6: Result := 'Bibliothek forderte separate Datensegmente für jede Task an.'; 8: Result := 'Zuwenig Speicher, um die Anwendung zu starten.'; 10: Result := 'Falsche Windows-Version.'; 11: Result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.'; 12: Result := 'Anwendung für ein anderes Betriebssystem.'; 13: Result := 'Anwendung für MS-DOS 4.0.'; 14: Result := 'Typ der ausführbaren Datei unbekannt.'; 15: Result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.'; 16: Result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.'; 19: Result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13#10 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.'; 20: Result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13#10 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.'; else Result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(ErrorCode) + ')'; end; end;
procedure TForm1.Button1Click(Sender: TObject); const MAX_ERROR_CODE = 32; var ReturnCode: integer; begin ReturnCode := ShellExecute(0, Nil, PChar('C:\RDM-TestUnit\XLoader\XLoader.exe'), Nil, Nil, SW_SHOWNORMAL); if ReturnCode <= MAX_ERROR_CODE then MessageBox(0, PChar(ShellExecuteErrorMessage(ReturnCode)), nil, MB_OK or MB_ICONERROR); end; |
P.S.: Die Funktion ShellExecuteErrorMessage ist von hier.
|
|
realerHanno
Hält's aus hier
Beiträge: 13
Win XP
Delphi Enterprise V7.0
|
Verfasst: So 12.10.14 20:05
Hallo WasWeißDennIch,
ist schon dumm - ShellExecute gibt nichts zurück. Es kommt das Gleiche wie vorher.
Scheinbar ist der ReturnCode > als der MAX_ERROR_CODE.
Die exe läuft übrigens "normal", wenn ich sie direkt aus Windows aufrufe.
Ein Aufruf aus dem Dos-Fenster (C:\>) über "RDM-TestUnit\XLoader\XLoader.exe" erzeugt einen Windows-Fehler
"XLoader hat ein Problem festgestellt und muss beendet werden".
Ein Aufruf gleichermaßen, aber aus "C:\RDM-TestUnit\XLoader\" klappt wieder einwandfrei.
Ist für mich schon seltsam. Habe auch die Gegenprobe mit calc.exe gemacht, da gibt es kein Problem.
Ich denke hier an einen bug in dem XLoader-Programm... bloß wie krieg ich das raus??
Danke erstmal für die erste Mühe, Dich mit diesem Problem zu identifizieren....
realhanno
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: So 12.10.14 21:11
Dann scheint das Programm intern mit relativen Pfaden zu arbeiten. Versuch doch mal, bei Deinem ShellExecute-Aufruf das Arbeitsverzeichnis festzulegen, das ist IIRC der vorletzte Parameter.
|
|
|