zoukankan      html  css  js  c++  java
  • 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 } 
  • 相关阅读:
    [maven 问题]java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map
    [Java基础]Java异常捕获
    [JVM]常用JVM工具使用
    [JVM]一次线上频繁GC的问题解决
    [Java 基础]ResultSet 指定field映射到Pojo对象的Map
    [JVM]使用JMeter做压力测试
    [Linux命令]zip
    [Mysql]分组取最新一条
    [zookeeper_kafka]zookeeper和Kafka安装
    网络带宽是什么?
  • 原文地址:https://www.cnblogs.com/Toya/p/14254800.html
Copyright © 2011-2022 走看看