2009-09-25 5 views

답변

6

system, ShellExecuteCreateProcess 호출을보고이 시나리오에서 어느 것이 적절한 지 파악하고 싶을 것입니다.

0

당신은 C의 시스템 호출 C++ 프로그램이 사용자로부터 얻을 수있는 모든 명령을 실행할 ++ 프로그램을 사용할 수 있습니다.

12

C/C++에서 Windows의 배치 파일을 실행하는 데 사용할 수있는 두 가지 옵션이 있습니다.

먼저 system (또는 와이드 문자는 _wsystem)을 사용할 수 있습니다.

"시스템 함수는 운영 체제 명령으로 문자열을 실행하는 명령 인터프리터에 명령을 전달합니다. 시스템은 명령 인터프리터 파일 (CMD라는 파일)을 찾는 COMSPEC 및 PATH 환경 변수를 참조합니다. EXE Windows 2000 이상에서). "

또는 CreateProcess을 직접 사용할 수 있습니다./c를 더한 이름 :; : 배치 파일에 대한 것을

주 lpApplicationName은 cmd.exe를 설정하고 설정 lpCommandLine 다음 인수에

는 "배치 파일을 실행하려면, 당신은 명령 인터프리터를 시작해야합니다 배치 파일. " 도스 퍼팅

+0

:: CreateProcess (L "cmd.exe"'정말 작동합니까? ERROR_FILE_NOT_FOUND 오류 2가 있습니다. 그러나 같은 호출에서 'L'로 바꾸면 c : \\ Windows \\ System32 \\ cmd.exe "', 그러면 기적적으로 작동합니다 ... – Liviu

5
//example that makes and then calls a batch file 

#include <iostream> 
#include <fstream> 
#include <stdlib.h> 
using namespace std; 
int main(int argc, char *argv[]) 
{ 
ofstream batch; 
batch.open("mybatchfile.bat", ios::out); 
batch <<"@echo OFF\n"; 
batch <<":START\n"; 
batch <<"dir C:\n"; 
batch <<"myc++file 2 >nul\n"; 
batch <<"goto :eof\n"; 
batch.close(); 

if (argc==2) 
    { 
    system("mybatchfiles.bat"); 
    cout <<"Starting Batch File...\n"; 
    } 
} 
1

는 배치 스크립트 좋은 생각 같아 내에서 명령. 그런 다음 물론 system 명령을 사용할 수 있습니다.

그러나 C++ 프로그램에서도 실행중인 배치 스크립트의 표준 출력이 필요한 경우 시도하십시오 : _popen 또는 _wpopen.

자세한 내용과 코드 샘플은 MSDN입니다.

관련 문제