Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » cmd-Datei ausführen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
05.04.2006, 11:50 Uhr
Kai



Hallo!

ich möchte eine Batch-Datei "Reg.cmd" aus meinem C++-Programm heraus starten. er zeigt zwar keinen Fehler an, aber es funktioniert einfach nicht hab auch schon mal shellExecute und system versucht. bei der Funktion system macht er wenigstens kurz das DOS-Fenster auf, gibt den WErt 3 zurück, aber die Datei wurde trotzdem nicht ausgeführt. bei der Funktion createProcess gibt er den WErt 1 zurück, was ja eigentlich auch bedeutet, dass kein Fehler aufgetreten ist. hier mal ein Stück aus meinem Code, vielleicht findet ja jmd einen Fehler oder kann mir weiterhelfen. wäre klasse

LG Kai


C++:
char strDU[255];
strcpy(strDU, "C:\\test\\Reg.cmd");
PROCESS_INFORMATION piDU;
STARTUPINFO suiDU;
suiDU.cb            =sizeof(STARTUPINFO);
suiDU.lpReserved        =0;
suiDU.lpDesktop        =NULL;
suiDU.lpTitle        =NULL;
suiDU.dwX        =0;
suiDU.dwY        =0;
suiDU.dwXSize        =0;
suiDU.dwYSize        =0;
suiDU.dwXCountChars    =0;
suiDU.dwYCountChars    =0;
suiDU.dwFillAttribute    =0;
suiDU.dwFlags        =STARTF_USESHOWWINDOW;
suiDU.wShowWindow    =SW_MINIMIZE;
suiDU.cbReserved2        =0;
suiDU.lpReserved2        =0;

do {
    Success = CreateProcess(NULL,
        strDU,
        NULL,
        NULL,
        FALSE,
        CREATE_NEW_CONSOLE,
        NULL,
        NULL,
        &suiDU,
        &piDU);
    if(fSuccess == 1){
        MessageBox(NULL, "Batchdabei ausgeführt.\n","Fehler",MB_OK);
    }else if(fSuccess == 0){
        MessageBox(NULL, "Batchdabei nicht ausgeführt.\n","Fehler",MB_OK);
    }
    if(!fSuccess) {
        switch (GetLastError())  // process common errors
        {
                    case ERROR_FILE_NOT_FOUND:
                MessageBox(NULL, "Batchdabei nicht gefunden.\n"
                                        "Abbruch\n","Fehler",MB_ICONSTOP|MB_OK);
                exit(1);
                          break;
                    case ERROR_DIRECTORY:
                      //puts("Error: bad starting directory");
                MessageBox(NULL, "Verzeichnis nicht gefunden.\n"
                                        "Abbruch\n","Fehler",MB_ICONSTOP|MB_OK);
                          exit(1);
                break;
                    case ERROR_PATH_NOT_FOUND:
                MessageBox(NULL, "Pfad nicht gefunden.\n"
                                        "Abbruch\n","Fehler",MB_ICONSTOP|MB_OK);
                          exit(1);
                break;
            default:
                MessageBox(NULL, "Fehler beim Erzeugen des\n"                            "Batchprozesses.\n","Fehler",MB_ICONSTOP|MB_OK);
                          exit(1);
                }      
    }
} while (!fSuccess);
CloseHandle(piDU.hThread);
dwResult = WaitForSingleObject(piDU.hProcess,(DWORD) -1);
fSuccess = GetExitCodeProcess(piDU.hProcess, &dwExitCode);
CloseHandle(piDU.hProcess);
long lDU = RegQueryValueEx(pSS32, 0, NULL, &dType, (LPBYTE)&lregOpenSS32, &dSize);
if(lDU!=ERROR_SUCCESS) {
    MessageBox(NULL, "Fehler beim Ausführen des Batches\n"
        "Führen Sie als Administrator den Batch manuell aus, indem Sie\n"
        "Reg.cmd im Verzeichnis C:\\test starten",
        "Batch ausführen", MB_ICONINFORMATION | MB_OK);
    exit(-1);
}else {
    MessageBox(NULL, "Batch ausgeführt.\nSetze fort.","Batch", MB_ICONINFORMATION | MB_OK);
}
RegCloseKey(pSS32);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2006, 12:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


haste mal probiert mit cmd /c pfad\zu\reg.cmd auszuführen? also über den commandozeileninterpreter dein script zu starten von deiner anwendung aus?
--
class God : public ChuckNorris { };

Dieser Post wurde am 05.04.2006 um 12:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2006, 12:12 Uhr
Kai



habe es jetz folgendermaßen geändert:


C++:
strcpy(strDU, "cmd /c C:\\test\\Reg.cmd");




aber er gibt mir die gleichen Meldungen aus, fSuccess ist 1 und beim Auslesen des Schlüssels merkt man dass er es nicht ausgeführt hat, er macht ja auch kein DOS-FEnster auf

Dieser Post wurde am 05.04.2006 um 12:32 Uhr von Kai editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.04.2006, 13:42 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
also Dein erster Quellcode sollte funktionieren. Kann nur an der Stapelverarbeitung liegen.
Setz doch mal ein "pause" an die letzte Stelle in der Stapelverarbeitung.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.04.2006, 13:56 Uhr
Kai



An die letzte Stelle in der Stapelverarbeitung? hört sich jetz vielleicht bissl doof an, aber was meinst du damit? ans Ende meiner cpp-Datei oder wohin? achja und noch ne Frage - meintest du mit "Pause" sowas wie system("PAUSE")? oder was ganz anderes?

achja total komisch hab ma


C++:
cmd /k c:\\test\\reg.cmd



versucht, da lässt er das Fenster offen, er führt es tatsächlich angeblich aus. komisch, dass er als Rückgabewert 1 zurückgibt, denn wenn ich schaue, ob er die Batch-Datei ausgeführt hat, sieht man dass ers net gemacht hat. bin total verwirrt

Dieser Post wurde am 05.04.2006 um 13:58 Uhr von Kai editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.04.2006, 15:36 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
reg.cmd ist doch bestimmt eine Art Batch-Datei in welcher bestimmte Aktionen afgerufen werden. Wenn dort an letzter Stelle der Befehl "pause" steht wird das Cmd-Fenster nicht sofort geschlossen. Wenn nicht "@Echo off" gesetzt ist, kannst Du sehen was verarbeitet wurde
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.04.2006, 15:51 Uhr
Kai



oh danke wusst ich nicht!

ja genau die reg.cmd ist eine Batch-Datei da stehn 3Anweisungen drinnen

regsvr32 SISYSnowbndListViewerP.ocx -s
regsvr32 SISYSnowboundViewerP.ocx -s
regsvr32 ss32x25.ocx -s

mit dem Pause am Ende sieht man mal, dass er n Dos-Fenster aufmacht und keine Fehler drinnen stehn danke für den Tipp! versteh das einfach nicht wieso geht das net? wenn keine Fehler auftreten, mein C++ programm auch sagt, dass es ausgeführt wurde, also keine FEhler aufgetreten sind, überprüft man das aber, merkt man dass es nicht ging *ganztraurigbin*

Gruß Kai
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.04.2006, 16:06 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
nimm mal den Parameter "-s" raus, der verhindert eine Ausgabe!

Bearbeitung von Uwe:
Wieso eigentlich Kai *gruebel*

--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 05.04.2006 um 16:18 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.04.2006, 16:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ansonsten /s, nich -s ? (oh er nimmt sogar beides an)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.04.2006, 16:50 Uhr
Kai



Naja weil ich schon mal nette Kommentare bekommen hab von wg Frauen können ja net programmieren, solls lieber sein lassen- deswegen Kai *sorry*

also hab das -s ma rausgenommen.

jetz kommt LoadLibrary("SISYSnowBndListViewerP.ocx") fehlgeschlagen - das angegebene Modul wurde nicht gefunden.

das ist ja doof, muss ich wohl den Pfad mit in die cmd-Datei aufnehmen oder? hätte es gerne eigentlich ohne Pfadangaben gehabt naja habs jetz ma getestet, seeeehr komisch, wenn ich den Pfad vor diese ocx-Dateien schreibe, dann sagt er zwar auch dass er das angegebene Modul nicht findet, aber es funktioniert

Ist zwar doof mit den festen Pfadangaben jetz, aber besser wie wenns gar net funktioniert! viiiiielen liebe danke für eure Hilfe

Gruß Kai

Dieser Post wurde am 05.04.2006 um 17:02 Uhr von Kai editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: