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. JBMP学习引导

    好文: 偶然机会,认识了工作流系统,并且在www.open-open.com(相当不错的开源项目站点,极力推荐!)上了解了些相当出色的工作流系统,不过呼声最高的应该属JBoss 的JBPM工作流组件了 ...

  2. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  3. Java如何从数组中查找对象元素?

    在Java中,如何从数组中查找对象元素? 示例 以下示例使用Contains方法来搜索数组中的String对象. package com.yiibai; import java.util.*; pub ...

  4. 如何在 Ubuntu 16.04,15.10,14.04 中安装 GIMP 2.8.16(类似于PS软件)

    GIMP 图像编辑器 2.8.16 版本在其20岁生日时发布了.下面是如何安装或升级 GIMP 在 Ubuntu 16.04, Ubuntu 15.10, Ubuntu 14.04, Ubuntu 1 ...

  5. Dubbo简介2

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成.具体可以看 百度百科 https://baike.ba ...

  6. docker默认ip查询

    查询docker ip地址 docker-machine ip default

  7. 安装Java Decompiler

    原文:https://blog.csdn.net/yh_zeng2/article/details/75948467 Java Decompiler是Java语言的反编译工具,具体介绍见博客Java ...

  8. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...

  9. h5文件(.h5和.hdf5)

    HDF5 (.h5, .hdf5) HDF 是 Hierarchical Data Format(分层数据格式)的缩写 HDF 版本 5不与 HDF 版本 4 及早期版本兼容. HDF5 (.h5, ...

  10. Ckeditor的JS的加载和取值和赋值方法

    Ckeditor 就是原来的Fckeditor. JS加载: $(function() { CKEDITOR.replace('FContent'); //FContent:这个对应文本域 }); J ...