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/ Wait / Environment Problem (https://www.delphipraxis.net/35864-shellexecute-wait-environment-problem.html)

Coder 12. Dez 2004 21:32


Shellexecute/ Wait / Environment Problem
 
jetzt hab ich 8 Stunden an dem Problem Shellexecute gesessen.
Und 5 verschiedene Wege ausprobiert, die allesamt nicht funktionieren.
okok, Shellexecute alleine: Ja; also 4.

Aber das reicht mir nicht... bzw. dem Programm.

Ich möchte ein älteres DOS Programm starten, und warten, bis es fertig ist.
Das Problem dabei ist, daß es eine environmentVariable SET PATH=
erwartet.

Die müßte also auch eingegeben werden. Vorher.
Ich hab das mit creatpeprocess, ShellexecuteandWait , Shellexecute und Batch (.cmd) und assarbads assarbads pas probiert (wie starte/binde ich die pas ein?)

Ich weiß keinen Rat mehr..
Daher wende ich mich an Euch.

fkerber 12. Dez 2004 21:33

Re: Shellexecute/ Wait / Environment Problem
 
Hi!

Was hast du denn bisher und was genau geht denn nicht?


Ciao Frederic

alcaeus 12. Dez 2004 22:27

Re: Shellexecute/ Wait / Environment Problem
 
Hi Coder,

erstmal müsstest du den Wert der PATH-Variable auslesen, um sie anschließend wiederherstellen zu können.
Anschließend könntest du eine Batch-Datei erstellen, welche erstmal die Path-Variable setzt, dann das entsprechende Programm aufruft und zu guter letzt die Path-Variable wieder auf den vorherigen Wert setzt. Nun rufst du mit ShellExecute die Datei auf:
Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', PChar(VariableZuDeinemPfad), nil, nil, SW_SHOW);
Die Funktion ShellExecuteAndWait ist mir zur Zeit nicht bekannt. Leider weiß ich auch nicht, wie das Warten funktioniert :oops: So abder könntest du testen, ob wenigstens die Batchdatei ausgeführt wird.

Greetz
alcaeus

Coder 12. Dez 2004 22:39

Re: Shellexecute/ Wait / Environment Problem
 
ich hab hier mal 4 Methoden [units - das wichtigste daraus,wg übersicht] hochgeladen
http://flashpage.fl.funpic.de/delph1/1.htm
http://flashpage.fl.funpic.de/delph1/2.htm
-------
http://flashpage.fl.funpic.de/delph1/3.htm << (gehört mit dem unteren zusammen in 1 Project, denk ich mal)
http://flashpage.fl.funpic.de/delph1/shellapiex.pas.htm <= hab die unit so von assarbad geladen

in welcher Reihenfolge ich die ausprobiert habe, weiß ich nicht mehr..
Sorry, hab auch schon müde Augen...
Aber vielleicht seht Ihr ja was

überall war u.a. Shellapi eingebunden..
daran kann es nicht gelegen haben.

Hoffe, aber Ihr kommt damit klar.

Danke!

Coder 14. Dez 2004 12:57

Re: Shellexecute/ Wait / Environment Problem
 
mhh, ich wollte noch mal nachfragen..
das is bestimmt untergegangen...

Aber die 2 Tage mehr, haben jetzt auch nicht so viel gebracht.

Kann doch wer helfen?

perle 14. Dez 2004 13:10

Re: Shellexecute/ Wait / Environment Problem
 
Zitat:

assarbads assarbads pas probiert (wie starte/binde ich die pas ein?)
so wie jede andere Unit auch ;-) --> uses ShellApiEx;

benutzt wird die Funktion genauso wie die normale Shellexecute Funktion wenn ich mich nicht irre, nur mit dem Unterschied, dass Assarbads Funktion am Ende ein Bool erwartet, also ob gewartet werden soll oder nicht.

jensw_2000 14. Dez 2004 13:56

Re: Shellexecute/ Wait / Environment Problem
 
Ich habe da noch etwas, das dir hoffentlich weiterhilft.

Unter Win2000 und XP startet jede Console mit "Standard" Umgebungsvariablen (die in den Windows Systemeigenschaften->Erweitert->Umgebungsvariablen definiert wurden).

Wenn du die Path Variable per Shellexecute (oder wie auch immer) setzt und dann mit ShellExecuteAndWait ,ShellExecuteAndWaitA, ShellExecuteAndWaitW dein DOS-Programm statest, dann kennt dieses die zuvor gesetzte Variable nicht.

Das kannst du ganz leichst nachvollziehen, indem du die Eingabeaufforderung 2x öffnest, in der 1. testweise SET TEST=1234 eingibst und in der 2. Eingabeaufforderung mal SET eintippst...
Nichts zu sehen von TEST=1234 :shock:

Als Ausweg könntest du es mal so probieren:

1. Batchdatei CallMyProg.bat erstellen:
Code:
REM -------------------- CallMyProg.bat ---------------------------
@echo off

if "%1" =="" GOTO ERR_NoPath

SET PATH=%1;%PATH%

CALL deine.exe
REM CALL sorgt dafür. das die BATCH auf Beendigung von "deine.exe" wartet

exit

:ERR_Nopath
echo Diese Batch erfordert einen Startparameter (Pfad)
echo ABBRUCH!
REM ------------------- Ende CallMyProg.bat ------------------------
2. Delphi

Delphi-Quellcode:
ShellExecute_AndWait(nil;'open','c:\CallMyProg.bat','Pfad zu deiner EXE','Pfad zu deiner EXE';9);
Ich habs bei mit (WinXP Pro SP1 und WinXP Pro SP2) mal probiert indem ich in der CallProg.bat "call cmd.exe" aufgerufen und die Batchdatei mit dem Parameter c:\myprog gestartet habe. Die Path-Variable war richtig gesetzt ... und Shellexec_AndWait hat auf die Beendigung der Batch gewartet...


Hoffentlich bringt es dich weiter ...

Schöne Grüße,
Jens

Assarbad 26. Dez 2004 14:57

Re: Shellexecute/ Wait / Environment Problem
 
Zitat:

Zitat von perle
so wie jede andere Unit auch ;-) --> uses ShellApiEx;

benutzt wird die Funktion genauso wie die normale Shellexecute Funktion wenn ich mich nicht irre, nur mit dem Unterschied, dass Assarbads Funktion am Ende ein Bool erwartet, also ob gewartet werden soll oder nicht.

Korrekt.

Wenn eine ANSI-Version benötigt werden sollte, einfach bescheidsagen, die ist im Nu fertig ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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