Bei Batch Datei ausführen, programm "sperren"
-
Hallo Leute,
ich möchte folgendes erreichen.
Ich führe mit meinem selbsterstelltem Programm ein Batch Datei aus, diese führt spezielle Befehle ca. 15s aus.Jetzt möchte ich mein Programm solange Batch Datei "sperren", sprich, dass man nichts verändern kann und wenn die Batch Datei fergtig ist, soll einen Meldung kommen, dass es alles ok ist und das Programm soll wieder entspert werden!
Wie mache ich das?
Gruß
-
Modalen Dialog auf und zum Schmuck noch eine Progress Bar laufen lassen.
-
das habe ich mir auch so vorgestellt, aber wocher weis meine Programm wann mein Bach Datei fertig ist?
-
swunder schrieb:
das habe ich mir auch so vorgestellt, aber wocher weis meine Programm wann mein Bach Datei fertig ist?
Kommt drauf an, wie Du sie startest.
Gibt CreateProcess nicht ein HANDLE zurück, auf das Du warten kannst?
-
schaust du zum Beispiel hier:
http://msdn.microsoft.com/en-us/library/ms682512%28VS.85%29.aspx
-
CreateProcess!!
Das ist der Process den ich überhaupt nicht schnalle! Alle sagen, dass ich es verwenden soll, aber ich finde überhaupt keine Beispiele oder sonstiges.Deswegen bin ich auf Batch gegangen.
Kann mir jemand da helfen?
-
bei dem Link den ich oben geschrieben habe is doch ein Beispiel dabei und wenn du herr und frau Google mal fragst findest du bestimmt noch tausende andere Beispiele und so schwer is das net
-
eben das ist das Problem.
ich habe schon viel in google gesucht, leider nichts gefunden, wo die Befehle, die ich in Batch Datei erstelt habe, ich über createProcess ausführen kann.
-
na du kannst doch deine .bat einfach mit createProcess ausführen, wo is das problem?
-
Das Problem ist, wenn ich diesen Code starte, dann passiert nichts. Sprich das Program läuft einfach durch ohne was gemacht zu haben.
STARTUPINFO SInfo; PROCESS_INFORMATION PInfo; DWORD dwExitCode; memset(&SInfo, 0, sizeof (STARTUPINFO)); SInfo.cb = sizeof (STARTUPINFO); // eigene Statup-Informationen als Ausgangsbasis verwenden ... GetStartupInfo(&SInfo); SInfo.wShowWindow = SW_NORMAL; if (CreateProcess(NULL, "c:\\temp\\blafusel.bat", NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &SInfo, &PInfo)) { while (WaitForSingleObject(PInfo.hProcess, 1000) != WAIT_OBJECT_0); dwExitCode = 0; if (!GetExitCodeProcess(PInfo.hProcess, &dwExitCode)) { // Fehlerauswertung, GetExitCodeProcess schlägt fehl } // dwExitCode kann hier ausgewertet werden } else { // Fehlerauswertung, CreateProcess schlägt fehl }
-
// Fehlerauswertung, CreateProcess schlägt fehl // hier mal ::GetLastError() aufrufen könnte evtl. nicht schaden
-
vielleicht auch mal den debuger bemühen was der sagt
-
bringt gar nichts! So wie es ausssieht läuft es einfach durch!
STARTUPINFO SInfo; PROCESS_INFORMATION PInfo; DWORD dwExitCode; memset(&SInfo, 0, sizeof (STARTUPINFO)); SInfo.cb = sizeof (STARTUPINFO); // eigene Statup-Informationen als Ausgangsbasis verwenden ... GetStartupInfo(&SInfo); SInfo.wShowWindow = SW_NORMAL; if (CreateProcess(NULL, "c:\\temp\\blafusel.bat", NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &SInfo, &PInfo)) { while (WaitForSingleObject(PInfo.hProcess, 1000) != WAIT_OBJECT_0); dwExitCode = 0; if (!GetExitCodeProcess(PInfo.hProcess, &dwExitCode)) { GetLastError() } // dwExitCode kann hier ausgewertet werden } else { // Fehlerauswertung, CreateProcess schlägt fehl }