CreateProcess简单示例

转载:https://blog.csdn.net/bzhxuexi/article/details/23950701

先写一个简单的程序:

 1 #include<iostream>  
 2 #include<Windows.h>  
 3   
 4 using namespace std;  
 5   
 6 int main(int argc, char *argv[])  
 7 {  
 8     cout << "args_num: " << argc << endl;  
 9     for(int i = 0;i < argc;i ++){  
10         cout << "arg " << i << " = " << argv[i] << endl;  
11     }  
12     system("pause");
13     return 0;  
14 } 

然后写一个程序,通过CreateProcess执行上面的程序生产的exe文件

 1 #include<iostream>  
 2 #include<Windows.h>  
 3   
 4 using namespace std;  
 5   
 6 int main()  
 7 {  
 8     char cWindowsDirectory[MAX_PATH];  
 9   
10     //LPTSTR 与 wchar_t* 等价(Unicode环境下)  
11     LPTSTR cWinDir = new TCHAR[MAX_PATH];  
12     GetCurrentDirectory(MAX_PATH, cWinDir);  
13   
14     LPTSTR sConLin = wcscat(cWinDir , L"\..\Debug\another.exe a b c d");  
15   
16     STARTUPINFO si;  
17     PROCESS_INFORMATION pi;  
18   
19     ZeroMemory(&si, sizeof(si));  
20     ZeroMemory(&pi, sizeof(pi));  
21   
22     //创建一个新进程  
23     if(CreateProcess(  
24         NULL,   //  指向一个NULL结尾的、用来指定可执行模块的宽字节字符串  
25         sConLin, // 命令行字符串  
26         NULL, //    指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。  
27         NULL, //    如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。<同上>  
28         false,//    指示新进程是否从调用进程处继承了句柄。   
29         0,  //  指定附加的、用来控制优先类和进程的创建的标  
30             //  CREATE_NEW_CONSOLE  新控制台打开子进程  
31             //  CREATE_SUSPENDED    子进程创建后挂起,直到调用ResumeThread函数  
32         NULL, //    指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境  
33         NULL, //    指定子进程的工作路径  
34         &si, // 决定新进程的主窗体如何显示的STARTUPINFO结构体  
35         &pi  // 接收新进程的识别信息的PROCESS_INFORMATION结构体  
36         ))  
37     {  
38         cout << "create process success" << endl;  
39   
40         //下面两行关闭句柄,解除本进程和新进程的关系,不然有可能不小心调用TerminateProcess函数关掉子进程  
41         CloseHandle(pi.hProcess);  
42         CloseHandle(pi.hThread);  
43     }  
44     else{  
45         cerr << "failed to create process" << endl;  
46     }  
47   
48     Sleep(100);  
49   
50     //终止子进程  
51     //TerminateProcess(pi.hProcess, 300);  
52   
53     //终止本进程,状态码  
54     ExitProcess(1001);  
55   
56     return 0;  
57 } 
原文地址:https://www.cnblogs.com/Toya/p/14254800.html