Hallo Leute, ich habe ein Program in Visual C++ geschrieben und möchte eine Batch Datei, welche von Program erstellt wird, aufruffen! Wie mache ich das? Ich habe über ShellExecute probiert leider erfolglos! Kann mir jemand so einen Befehlscode geben?
ShellExecute sollte schon gehen, zur not den cmd und als Parameter die batch starten. Warum sollte man aber sotwas tun, was kann den die batch datei was dein c++ nicht kann?
ich muss ein paar Befehle z.B. avrdude ausführen und da hat man mir empfohlen, das über Batch datei zu machen? Kannst du mir vielleicht ein Beispiel geben wie ich, dass mit ShellExecute machen kann
> ich muss ein paar Befehle z.B. avrdude ausführen und da hat man mir > empfohlen, das über Batch datei zu machen? Und haben die, die das Dir empfohlen haben, auch begründet? Davon abgesehen lassen sich Batchdateien auch mit CreateProcess starten:
1 | STARTUPINFO SInfo; |
2 | PROCESS_INFORMATION PInfo; |
3 | DWORD dwExitCode; |
4 | |
5 | memset(&SInfo, 0, sizeof (STARTUPINFO)); |
6 | SInfo.cb = sizeof (STARTUPINFO); |
7 | |
8 | // eigene Statup-Informationen als Ausgangsbasis verwenden ...
|
9 | GetStartupInfo(&SInfo); |
10 | |
11 | SInfo.wShowWindow = SW_NORMAL; |
12 | |
13 | if (CreateProcess(NULL, "c:\\temp\\blafusel.bat", NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &SInfo, &PInfo)) |
14 | {
|
15 | while (WaitForSingleObject(PInfo.hProcess, 1000) != WAIT_OBJECT_0); |
16 | |
17 | dwExitCode = 0; |
18 | |
19 | if (!GetExitCodeProcess(PInfo.hProcess, &dwExitCode)) |
20 | {
|
21 | // Fehlerauswertung, GetExitCodeProcess schlägt fehl
|
22 | }
|
23 | |
24 | // dwExitCode kann hier ausgewertet werden
|
25 | }
|
26 | else
|
27 | {
|
28 | // Fehlerauswertung, CreateProcess schlägt fehl
|
29 | }
|
Die Begründung war, dass es viel einfacher ist, als mit C das zu schreiben. Gibt es eine andere Möglichkeit? Wenn ja welche und wie geht Sie?
Wenn Du in meinem Codebeispiel den String "c:\\temp\\blafusel.txt" beispielsweise durch "c:\\windows\\notepad.exe" ersetzt, wird Dir vielleicht was klar.
@Rufus t. Firefly Also ich habe so gemacht wie du es gesagt hast, leider stelle ich gar nichts fest. Es läuft einfach durch ohne was zu machen! Ich habe dann nach CreatProcess in googgle geschaut, aber ich verstehe trotzdem auf was du hinaus willst! Gruß
Hast du denn auch eine Batchdatei C:\temp\blafusel.bat angelegt, die irgendwas erkennbares tut?
Nein ich habe so wie Rufus gesagt hat c:\\temp\\blafusel.txt (bat)" durch "c:\\windows\\notepad.exe" ersetzt. ich versuche dann nochmal mit C:\temp\blafusel.bat
Das kann doch nicht so schwer sein! Ich habe es mal eben probiert... Folgende Batchdatei c:\tmp\test.bat:
1 | echo Hallo |
zusammen mit dem Quelltext t.c:
1 | #include <stdlib.h> |
2 | |
3 | int main( int nargs, char **args ) |
4 | {
|
5 | system( "cmd /C c:\\tmp\\test.bat" ); |
6 | return 0; |
7 | }
|
Kompiliert mit VS2005 in der Kommandozeile mit cl t.c läuft und gibt "Hallo" aus. Wo ist jetzt das Problem?
@Klaus Wachtler Das Problem eine .BAT aufzuruffen habe ich schon gelöst. Es geht eigentlich jetzt um Vorschlag "Rufus t. Firefly". Sprich nicht über Batch Datei zu machen.
Hast Du denn in die von mir mit "// Fehlerauswertung" gekennzeichneten Funktionszweige ein entsprechende Fehlerauswertung eingebaut? Lässt Du Dir da jeweils das Resultat von GetLastError() anzeigen?
jetzt habe ich die Funktion GetLastError() eingebaut, aber das Programm läuft so wie es aussieht einfach durch!
Du hast die Funktion ... eingebaut. Aha. Aber das Programm /läuft einfach durch/. Könntest Du Dich dazu bequemen, mal im Debugger im Single-Step-Betrieb durch Dein Programm durchzugehen, um den Programmablauf zu sehen und die Rückgabewerte der verschiedenen Funktionen anzusehen?
Rufus t. Firefly schrieb: > Du hast die Funktion ... eingebaut. Aha. Aber das Programm /läuft > einfach durch/. Hm, sollte das zwischen den Schrägstrichen nicht /als Kursivschrift erscheinen/? Ha! In der Tat: In der Vorschau war es bei mir kursiv, fertig gepostet dann nicht mehr. :-(
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.