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);
|
|