www.mikrocontroller.net

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


Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
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
}

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht auch mit system( "cmd.exe ..." );

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann doch nicht so schwer sein!

Ich habe es mal eben probiert...

Folgende Batchdatei c:\tmp\test.bat:
echo Hallo
zusammen mit dem Quelltext t.c:
#include <stdlib.h>

int main( int nargs, char **args )
{
  system( "cmd /C c:\\tmp\\test.bat" );
  return 0;
}

Kompiliert mit VS2005 in der Kommandozeile mit cl t.c läuft und
gibt "Hallo" aus.

Wo ist jetzt das Problem?

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: steve (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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. :-(

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.