TCHAR szCmdLine[]={TEXT("E:\\CPL-server\\其他工具\\restartSrv\\bin\\opensavepath.exe")};
TCHAR static szCommandLine[MAX_PATH + 700] = {0};
lstrcpy(szCommandLine, pProgramPath); STARTUPINFO si = {0};
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; // 运行进程
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi)); BOOL bRet = FALSE;
bRet = CreateProcess(pProgramPath, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi); ///<关闭Restartsrv不会关闭创建进程子窗口>
//BOOL bRet = CreateProcess(
// NULL, // name of executable module
// szCmdLine, // command line string
// NULL, // process attributes
// NULL, // thread attributes
// FALSE, // handle inheritance option
// CREATE_NEW_CONSOLE, // creation flags
// NULL, // new environment block
// NULL, // current directory name
// &si, // startup information
// &pi); // process information if( bRet )
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
} //ShellExecute(NULL, "open", szCmdLine, NULL, NULL, SW_SHOWNORMAL); return bRet;

  

都说通过createprocess函数创建的另一个进程(打开另一个程序),关闭父进程一般不会关闭子进程。

但是最近测试发现如果使用一个控制台程序使用createprocess函数打开另一个控制台程序,而且dwCreationFlags参数不指定为CREATE_NEW_CONSOLE或者DETACHED_PROCESS值。那么关闭父进程也会关闭子进程。

如果使用一个控制台程序使用createprocess函数打开的是一个窗口程序,关闭父进程确实不会关闭子进程。

另外在控制台程序中使用 ShellExecute(NULL, "open", szCmdLine, NULL, NULL, SW_SHOWNORMAL);打开一个进程控制台程序或者窗口程序,关闭父进程对子进程都没有影响。

所有,我猜测是因为使用控制台程序打开另一个控制台程序,不特别指定创建新控制台窗口或者脱离父进程,他们使用的是同一个控制台,没有创建新的控制台窗口,所有关闭这个控制台窗口相当于关闭了两个控制窗口。

关于CreateProcess函数一些经验的更多相关文章

  1. CreateProcess函数具体解释

    CreateProcess说明:WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程执行指定的可执行文件. 函数原型:BOOL CreateProcess(    ...

  2. CreateProcess函数诡异的表现

    场景:程序A使用CreateProcess函数去启动另一个程序(.exe)文件,在绝大部分情况下是可以成功启动的,但是在某些电脑上无效. 因为这“某些电脑”实在不好找,终于有一天借到一台这样的电脑. ...

  3. CreateProcess函数详解

    在windows程序设计五中有详解 CreateProcess 说明: WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件. 函数原型: B ...

  4. 使用CreateProcess函数运行其他程序

    为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建一个运行相应程序的进程.其函数原型如下.CreateProcess(appName, co ...

  5. CreateProcess函数详解及示例

    WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件. 函数原型: BOOL CreateProcess ( LPCTSTR lpApplic ...

  6. [转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

    三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...

  7. MFC-简单的函数使用

    1.  MessageBox(str);很简单的一个函数,该函数参数为字符串.用来弹出一个窗口显示str的内容,str为一个字符串. 2.  UpdateData();该函数是vc++中处理控件变量的 ...

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

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

  9. 【转载】详解CreateProcess调用内核创建进程的过程

    原文:详解CreateProcess调用内核创建进程的过程 昨天同学接到了腾讯的电面,有一题问到了CreateProcess创建进程的具体实现过程,他答得不怎么好吧应该是, 为了以防万一,也为了深入学 ...

随机推荐

  1. javaweb-Excel导入导出后台代码

    前言: 导入导出后台java代码写好很久了,但是...但是...前台不会写啊. 先把后台代码帖上吧 1.excelToDb package util; /** * 代码解释:此方法将传入一个URL,即 ...

  2. 33个与众不同的Web表单设计

    表单在web设计中很重要,因为它具有直接的用户交互.创新?有趣?富有色彩?设计一个交互,需要设计师关注登陆/注册表单的设计元素. 这里有33个与众不同的web表单设计,希望能使你获得设计灵感. 1. ...

  3. Android seLinux 设置

    在android O上添加服务.在访问一些路径的时出现了权限的问题,将seLinux关闭之后运行成功.所以需要设置相关的权限. 参考文档: http://blog.csdn.net/tung214/a ...

  4. Java如何获得运行线程的优先级?

    在Java编程中,如何获得运行线程的优先级? 以下示例使用setPriority()方法打印正在运行的线程的优先级. package com.yiibai; public class GettingT ...

  5. asp 写文件

    '写文件 Sub WriteToTextFile (FileUrl,byval Str,CharSet) set fso = Server.CreateObject("Scripting.F ...

  6. mysql监控工具sqlprofiler,类似sqlserver的profiler工具

    最近无意发现了mysql的客户端监控工具“Nero Profile SQL”,刚开始还不知道怎么使用,经过半小时摸索,现将使用步骤写下来. 背景:开发的时候,如果数据存储层这块使用EF,或者其他orm ...

  7. mysql存储过程----临时表 temporary

    在存储过程中可以使用临时表,下面有一个分割字符串的例子 语法 1.创建:create temporary table 表名(列信息); 2.删除:drop table 表名; 3.清空:truncat ...

  8. Git -- 相关命令

    git init : 将当前目录变成Git可以管理的仓库 git add :告诉Git,把文件添加到仓库 git commit -m "" :把文件提交到仓库 git status ...

  9. Linux环境下Redis安装配置步骤[转]

    在LInux下安装Redis的步骤如下: 1.首先下载一个Redis安装包,官网下载地址为:https://redis.io/ 2.在Linux下解压redis: tar -zxvf redis-2. ...

  10. service citrix xcenserver health check service (xenserver healthcheck) failed to start verfy that you have sufficient privileges to srart system services

    citrix XcenServer版本:7.2 citrix Xcencenter版本:7.2 安装citrix Xcencenter的时候报错: service citrix xcenserver ...