Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecute - funktioniert nicht. (https://www.delphipraxis.net/114322-shellexecute-funktioniert-nicht.html)

skyquaker 23. Mai 2008 11:49


ShellExecute - funktioniert nicht.
 
Ich möchte mit ShellExecute ein externes Programm aufrufen. Diese Programm ist ein compiliertes (gepacktes) PERL Script (PerlAPP).


Delphi-Quellcode:
ShellExecute(Application.Handle, nil, PChar('.\bin\programm.exe'),'','',SW_SHOW);
Wenn ich es so mache, wird das Programm nicht einmal angezeigt.



Delphi-Quellcode:
Batch:

.\bin\programm.exe
pause
Delphi-Quellcode:
ShellExecute(Application.Handle, nil, PChar('.\bin\test.exe'),'','',SW_SHOW);
Auf diese Weise startet das Programm trotzdem nicht. Ich kriege einen Fehler angezeit, der mit Ressourcen des PERL Scripts zu tun hat.

Wenn ich die Batch Datei oder die Exe manuell aufrufe, funktioniert sie einwandrei.


mfg skyquaker

lbccaleb 23. Mai 2008 11:50

Re: ShellExecute - funktioniert nicht.
 
kontrolliere mal, ob er die datei überhaupt findet, das kannst du mit fileexists('deine datei') machen..

Bbommel 23. Mai 2008 11:56

Re: ShellExecute - funktioniert nicht.
 
Moin,

wieso gibst du als zweiten Parameter "nil" mit? Das ist ja die Operation, die er machen soll und ich hab da immer 'open' stehen.

Also:
Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', PChar('.\bin\programm.exe'),'','',SW_SHOW);
Bis denn
Bommel

skyquaker 23. Mai 2008 11:57

Re: ShellExecute - funktioniert nicht.
 
Zitat:

Zitat von lbccaleb
kontrolliere mal, ob er die datei überhaupt findet, das kannst du mit fileexists('deine datei') machen..

FileExists meldet "TRUE"

skyquaker 23. Mai 2008 12:00

Re: ShellExecute - funktioniert nicht.
 
Zitat:

Zitat von Bbommel
Moin,

wieso gibst du als zweiten Parameter "nil" mit? Das ist ja die Operation, die er machen soll und ich hab da immer 'open' stehen.

Also:
Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', PChar('.\bin\programm.exe'),'','',SW_SHOW);
Bis denn
Bommel

'open' habe ich auch schon ausprobiert, selber Effekt.

Das Problem scheint mit der EXE zu tun zu haben. Sie sucht eine Ressource, die sie nicht finden kann. Wenn ich sie manuell aufrufe läuft sie jedoch einwandfrei.

Bbommel 23. Mai 2008 12:03

Re: ShellExecute - funktioniert nicht.
 
Ach so, noch eine Idee: ShellExecute gibt einen Wert zurück, den du abfangen und z.B. per MessageDlg ausgeben kannst. Laut Hilfe sollte er größer als 32 sein, damit der Aufruf erfolgreich war, der Rest unter 32 ist dann ein Ferhlercode.

Bis denn
Bommel

Luckie 23. Mai 2008 12:32

Re: ShellExecute - funktioniert nicht.
 
Gib mal in Arbeitsverzeichnis an und/oder versuch es mal mit einem absoluten Pfad, wer weiß zu was dein relativer Pfad relativ ist.

Aber erst Maßnahme ist immer, den Rückgabewert auszuwerten, dann spart man sich das rumgerate, auch hier im Forum. :?

jmit 23. Mai 2008 15:09

Re: ShellExecute - funktioniert nicht.
 
Hast Du Dir schon einmal folgenden Link angeschaut:

ShellExecute vom Delphi-Treff

Gruß Jörg

skyquaker 23. Mai 2008 15:29

Re: ShellExecute - funktioniert nicht.
 
Ich hab die Exe Datei (und ihre Ressourcen) probehalber ins Anwendungsverzeichniss verschoben und siehe da: Es geht ohne Probleme. Die Andwendung kann also im Verzeichniss "BIN" ihre Ressourcen nicht finden und sucht sie im Anwendungsverzeichniss "..\BIN". Kann ich das irgendwie beheben oder muss ich alles einfach aus dem Anwendungsverzeichniss heraus aufrufen?

Bbommel 23. Mai 2008 15:34

Re: ShellExecute - funktioniert nicht.
 
Der fünfte Parameter gibt das Arbeitsverzeichnis an. Hast du denn schon mal

Delphi-Quellcode:
ShellExecute(Application.Handle, nil, PChar('.\bin\programm.exe'),'',PChar('.\bin'),SW_SHOW);
versucht?

Wahlweise auch mal an beiden Stellen mit absoluten Pfad-Angaben testen...

Bis denn
Bommel

skyquaker 23. Mai 2008 15:55

Re: ShellExecute - funktioniert nicht.
 
So, das ist zwar nicht unbedingt wie ich es mir vorgestellt habe, es scheint jedoch zu funktionieren.

Delphi-Quellcode:
ShellExecute(Application.Handle, 'open',PChar(ExtractFilepath(ParamStr(0))+'bin\test.bat'),'.\',PChar(ExtractFilepath(ParamStr(0))+'bin'),SW_NORMAL);
Das seltsame daran ist, dass es nur absolute Pfadangaben akzeptiert (das Problem hatte ich mit ShellExecute noch nie) und das sich das Programm ausschließlich über die Batch Datei aufrufen lässt (ohne Batch startet es garnicht erst).

Das mit der Pfadangabe hatte ich vorher schon einmal probiert, ich hatte jedoch ein "\" am Ende stehen, weshalb auch das nicht funktioniert hat.

Luckie 23. Mai 2008 17:55

Re: ShellExecute - funktioniert nicht.
 
Das ist genau so, wie es funktioniert. Wer weiß wo der relative Pfad hinzeigt bei dir. Und den Rückgabewert hast du immer nboch nicht ausgewertet. Beim nächsten Fehler raten wir hier wieder rum, wie die Blöden.

Fussball-Robby 23. Mai 2008 21:39

Re: ShellExecute - funktioniert nicht.
 
Zitat:

Zitat von skyquaker
So, das ist zwar nicht unbedingt wie ich es mir vorgestellt habe, es scheint jedoch zu funktionieren.

Delphi-Quellcode:
ShellExecute(Application.Handle, 'open',PChar(ExtractFilepath(ParamStr(0))+'bin\test.bat'),'.\',PChar(ExtractFilepath(ParamStr(0))+'bin'),SW_NORMAL);

ShellExecute mit ExtractFilePath(ParamStr(0)) zu verwenden, ist doch das einzig Richtige :roll: Wie Michael jetzt schon (mehrmals glaube ich) gesagt hat, beim relativen Pfad ohne ParamStr(0) weißt du jenach dem, wie dein Programm gestartet wurde, nie wo der hinzeigt.

FGD 25. Mai 2008 10:11

Re: ShellExecute - funktioniert nicht.
 
Ich möchte keinen neuen Thread aufmachen.

Wie kann man ein Programm mit Parametern starten.

In einer Verknüpfung würde es so aussehen:
Code:
...\ROClientGame.exe" Benutzname MD5-Hash

DeddyH 25. Mai 2008 10:14

Re: ShellExecute - funktioniert nicht.
 
Schau Dir mal den 4. Parameter von ShellExecute an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 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-2025 by Thomas Breitkreuz