Forum: PC-Programmierung batch datei aufrufen in visual c++


von steve (Gast)


Lesenswert?

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?

von Peter (Gast)


Lesenswert?

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?

von steve (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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
}

von steve (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du in meinem Codebeispiel den String "c:\\temp\\blafusel.txt" 
beispielsweise durch "c:\\windows\\notepad.exe" ersetzt, wird Dir 
vielleicht was klar.

von Klaus W. (mfgkw)


Lesenswert?

geht auch mit system( "cmd.exe ..." );

von steve (Gast)


Lesenswert?

@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ß

von Rolf Magnus (Gast)


Lesenswert?

Hast du denn auch eine Batchdatei C:\temp\blafusel.bat angelegt, die 
irgendwas erkennbares tut?

von steve (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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?

von steve (Gast)


Lesenswert?

@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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von steve (Gast)


Lesenswert?

jetzt habe ich die Funktion GetLastError() eingebaut, aber das Programm 
läuft so wie es aussieht einfach durch!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Mark B. (markbrandis)


Lesenswert?

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
Noch kein Account? Hier anmelden.