Starten einer Batch - nur echo?!?
-
Hallo!
ich hänge gerade an einem eigenartigen Problem
Ich möchte aus meinem programm eine .bat Datei starten. Funktioniert auch.
Ausgaben werden in einer DOS-Box angezeigt, aber befehle wie z.B. XCOPY werden einfach ignoriert.Erstmal der code:
String^ s = String::Concat("C:\\TEMP\\,Test.bat); IntPtr iptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s); char * cmd = (static_cast<char*>(iptr.ToPointer())); system(cmd);
Kleines Beispiel:
ich ahbe eine Bat datei: C:\TEMP\Test.bat mit folgendem inhalt:@echo off cls echo ***Ausfueren der Test.bat*** echo. XCOPY test.txt "C:\" echo. echo ***Erfolgreich beendet*** pause exit
Starte meine Programm .
cmd wird geöffnet, ich bekomme die Ausgaben (Ausfuehren... beendet)
Die Datei wurde aber nicht kopiert.
wenn ich die bat von hand starte funktioniert aber alles problemlos.Kann mir da jemand weiterhelfen?
-
test.txt ist ein relativer Pfad. Gibts das file wirklich im Arbeitsverzeichnis deiner exe?
-
ja gibt es
maneull funktioniert es ja auch wunderbar
Stehe echt auf der leitung...
Dachte vllt fehlt es an ausführrechten aber die .bat kann von allen nutzern ausgeführt werden.
-
kleiner nachtrag:
ich bekomme als rückgabe wert int 4
0 wäre erfolgreich
gibt es irgendwo eine beschreibung was rückgabe 4 bedeuted?
-
Ich denke auch, dass es am Pfad liegt. Füge doch ein "cd <Pfad>" in die Batchdatei ein
-
ThomasI schrieb:
String^ s = String::Concat("C:\\TEMP\\,Test.bat);
Was hat das Komma da im Pfad zu suchen?
Gruß, Doug_HH
-
und warum schreibst Du nicht einfach:
String^ s = "C:\\TEMP\\Test.bat"
?
Und verwendest dannSystem::Diagnostic::Process::Start(s);
?
-
...oder du benutzt WinExec("deinprogramm.exe", SW_SHOW); und bindest dann noch die windows.h ein?
-
Ich rate davon ab, sowas zu machen. Es verwirrt nur sehr wenn man native und managed Code (unwissentlich) mischt. Das ganze Marschalling ist dann auch total überflüssig...
-
einfach mit ShellExecute??!??