转自:http://blog.csdn.net/zgl7903/article/details/5975284

转载这篇主要是记住:获得create的新进程运行结束时的返回值的方法

如下:

  1.  
    #include <malloc.h>
  2.  
     
  3.  
    DWORD run_Execute(LPCTSTR lpszFile, LPCTSTR lpszParam)
  4.  
    {
  5.  
    DWORD exitCode = 0;
  6.  
    PROCESS_INFORMATION pInfo = {0};
  7.  
    STARTUPINFO sInfo = {0};
  8.  
    sInfo.cb = sizeof(STARTUPINFO);
  9.  
    sInfo.wShowWindow = SW_SHOW;
  10.  
     
  11.  
    int nCmdLen = (_tcslen(lpszFile) + _tcslen(lpszParam) + 2) * sizeof(TCHAR);
  12.  
    LPTSTR lpszCmd = (LPTSTR)_alloca(nCmdLen);
  13.  
    memset(lpszCmd, 0, nCmdLen);
  14.  
    _tcscpy(lpszCmd, lpszFile);
  15.  
    if(lpszParam)
  16.  
    {
  17.  
    _tcscat(lpszCmd, _T(" "));
  18.  
    _tcscat(lpszCmd, lpszParam);
  19.  
    }
  20.  
     
  21.  
    if(CreateProcess(
  22.  
    NULL, //LPCTSTR lpApplicationName, // pointer to name of executable module
  23.  
    lpszCmd, //LPTSTR lpCommandLine, // pointer to command line string
  24.  
    NULL, //LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
  25.  
    NULL, //LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
  26.  
    FALSE, //BOOL bInheritHandles, // handle inheritance flag
  27.  
    0, //DWORD dwCreationFlags, // creation flags
  28.  
    NULL, //LPVOID lpEnvironment, // pointer to new environment block
  29.  
    NULL, //LPCTSTR lpCurrentDirectory, // pointer to current directory name
  30.  
    &sInfo, //LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
  31.  
    &pInfo)) //LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
  32.  
    {
  33.  
    // Wait until child process exits.
  34.  
    WaitForSingleObject( pInfo.hProcess, INFINITE );
  35.  
     
  36.  
    if (GetExitCodeProcess(pInfo.hProcess, &exitCode))
  37.  
    {
  38.  
    TRACE( _T("Exit code = %d/n"), exitCode);
  39.  
    }
  40.  
    else
  41.  
    {
  42.  
    TRACE( _T("GetExitCodeProcess() failed: %ld/n"), GetLastError());
  43.  
    ASSERT(0);
  44.  
    }
  45.  
     
  46.  
    // Close process and thread handles.
  47.  
    CloseHandle( pInfo.hProcess );
  48.  
    CloseHandle( pInfo.hThread );
  49.  
    }
  50.  
    else
  51.  
    {
  52.  
    TRACE( _T("CreateProcess() failed: %ld/n"), GetLastError());
  53.  
    ASSERT(0);
  54.  
    }
  55.  
     
  56.  
    return exitCode;
  57.  
    }

  1.  
    //测试示例
  2.  
    run_Execute(_T("notepad.exe"), _T("c://temp//aa.txt"));

jpg 转 rar 

使用CreateProcess创建新的process 并返回process运行结束返回值的更多相关文章

  1. Win32 API编程:使用CreateProcess创建新进程

    #include <windows.h> #include <tchar.h> #include <stdio.h> int main(int argc, char ...

  2. VC++ 使用CreateProcess创建新进程

    https://www.cnblogs.com/fancing/p/6477918.html #include <windows.h> #include <tchar.h> # ...

  3. android点击返回键,如何做到不destory当前activity,只是stop。重新返回该activity的 时候可以直接使用,不需要创建新的activity实例

    问题描述,如题目: android点击返回键,顺序执行 pause,stop,destory. 以至于想重新进入这个activity的时候还要重新执行onCreate()方法,那么如何解决不再重新执行 ...

  4. Delphi 使用CreateProcess创建进程并弹出进程PID值 (转)

    var  ExeName:PChar;  StartupInfo:TStartupInfo;  ProcessInfo:TProcessInformation;begin  FillChar(Proc ...

  5. linux进程学习-创建新进程

    init进程将系统启动后,init将成为此后所有进程的祖先,此后的进程都是直接或间接从init进程“复制”而来.完成该“复制”功能的函数有fork()和clone()等. 一个进程(父进程)调用for ...

  6. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果

    前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...

  7. 用Kotlin开发Android应用(II):创建新项目

    这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...

  8. Drupal8开发教程:模块开发——创建新页面

    之前我们已经通过<Drupal8开发教程:认识.info.yml文件>对模块的YAML文件有了了解,今天我们来看如何通过模块开发的方式添加一个新的页面. 在 Drupal 7 中,通过模块 ...

  9. (转)Qt Model/View 学习笔记 (四)——创建新的Models

    创建新的Models 介绍 model/view组件之间功能的分离,允许创建model利用现成的views.这也可以使用标准的功能 图形用户接口组件像QListView,QTableView和QTre ...

随机推荐

  1. SAP ERP 与SAP CRM有什么不同?

    SAP ERP 与SAP CRM有什么不同? 从管理理念上来说,ERP是提高企业内部资源的计划和控制能力,讲究的是在满足客户.及时交货的同时最大限度地降低各种成本,通过提高内部运转效率来提高对客户的服 ...

  2. qcom wlan kernel 解读 WCNSS_qcom_cfg.ini 文件

    CORE/HDD/src/wlan_hdd_main.c 模块初始化: static int __init hdd_module_init ( void) { return hdd_driver_in ...

  3. 杂乱所得之RPC【待整理】

    在计算机的世界里,不仅有程序内部的通信,还需要程序之间的通信,这又包含两大类:同一台主机的程序之间的通信.不同主机的程序之间的通信. 同一台主机的程序之间的通信就是IPC,IPC(Inter-proc ...

  4. Numpy存字符串

    # -*- coding: utf-8 -*- import numpy as np student = np.dtype({'names':['name', 'age', 'weight'], 'f ...

  5. (转) s-video vs. composite video vs. component video 几种视频格式详细说明和比较

    之前对着几种视频格式认识不是很清晰,所以看数据手册的时候,看的也是稀里糊涂的. 因为项目中需要用到cvbs做视频输入,在元器件选型上,看到tw2867的数据手册上,有这么一句话: The TW2867 ...

  6. Winform控件学习笔记【第六天】——TreeView

    TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...

  7. RMAN命令总结

    一,RMANR 连接到库 1),连接本地数据库 a,如果本地有多少实例,则需要设置环境变量ORACLE_SID,  windows 平台: set ORACLE_SID= INSTANACE NAME ...

  8. u3d Mecanim动画

    作为Unity4.0的主要更新功能,Mecanim动画被寄予了很多的期望.系统有先进的地方,也有不足的地方.这些我们留到最后再来总结. 阿赵粗略的学习了一下,写下以下的教程.这篇教程简单的说明了Mec ...

  9. UpdateData()用法

    一.总结UpdateData()函数 UpdateData(true);//用于将屏幕上控件中的数据交换到变量中. UpdateData(false);//用于将数据在屏幕中对应控件中显示出来.    ...

  10. Android布局学习——android:gravity和android:layout_gravity的区别

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...