ShellExecute() macht nicht das was ich erwarte!

abrissbirne

Grünschnabel
Ich weiß das es hier mehrere Themen über ShellExecute gibt. Mein Problem ist auch nicht "Wie verwende ich es" sondern das es nicht das macht was ich möchte. Ich arbeite mit Visual Studio 6.0. Habe ein Programm geschrieben das mir ein Batch Programm erzeugt. Rufe ich dieses Batch-Programm mit ShellExecute() auf tut sich nix außer das sich die Windows Shell kurz öffnet. Öffne ich die Batch mit einem doppelklick, macht sie genau das was ich möchte. Woran kann das liegen? Mein Code:
Code:
// Auszug aus meinem Quellcode

nPos = strPathofCFile.ReverseFind('\\');
strPathofCFile = strPathofCFile.Mid(0, nPos);
strPathofCFile += "make.bat";

SaveFile.Open(strPathofCFile, CFile::modeCreate | CFile::modeWrite);
SaveFile.WriteString(strmakeBAT);
SaveFile.Close();
// Bis hierhin alles in Ordnung. Batch wird erzeugt, der Inhalt stimmt, alles OK.

ShellExecute(NULL, "open", strPathofCFile, NULL, NULL, SW_SHOW);

Vieleicht sehe ich im Moment den Wald vor Bäumen nicht mehr :confused:, aber ich komme nicht dahinter.
 
Hi.

Ein Unterschied zwischen Doppelklick und ShellExecute wäre, das beim Doppelklick die Batchdatei im Verzeichnis gestartet wird in dem sie sich befindet, während bei ShellExecute die Datei im aktuellen Arbeitsverzeichnis gestartet wird - also vermutlich in dem Verzeichnis in dem sich deine .exe befindet.

Gruß
 
Hi.

Ein Unterschied zwischen Doppelklick und ShellExecute wäre, das beim Doppelklick die Batchdatei im Verzeichnis gestartet wird in dem sie sich befindet, während bei ShellExecute die Datei im aktuellen Arbeitsverzeichnis gestartet wird - also vermutlich in dem Verzeichnis in dem sich deine .exe befindet.

Gruß

Kann man den Doppelklick in C++ nachbilden? Es wäre besser, wenn ich das Batch in dem Verzeichnis starten könnte, indem auch die C++ Datei liegt.
 
Kann man den Doppelklick in C++ nachbilden?
Wozu? Mit der Funktion SetCurrentDirectory kann man das aktuelle Verzeichnis wechseln.
Es wäre besser, wenn ich das Batch in dem Verzeichnis starten könnte, indem auch die C++ Datei liegt.
Dann mußt du die Batchdatei so schreiben, das das auch geht. Wie sieht denn die Batchdatei aus?

Gruß

PS: Es wäre natürlich auch noch recht interessant welchen Rückgabewert (bzw. Fehlercode) die ShellExecute Funktion hat
 
Zuletzt bearbeitet:
Naja, die Batchdatei muß also in dem Verzeichnis aufgerufen werden in dem auch das Makefile liegt. Du mußt also vor ShellExecute oder alternativ in der Batchdatei das Verzeichnis entsprechend wechseln.

Gruß
 
Zurück