首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateProcess()启动子应用程序

CreateProcess()启动子应用程序
EN

Stack Overflow用户
提问于 2013-01-13 09:10:10
回答 1查看 9.2K关注 0票数 2

我想使用CreateProcess函数从主应用程序启动一个子应用程序,步骤如下:

  1. 为子程序从主窗口启动子.exe程序
  2. 等待rand Sleep
  3. 然后先终止子应用程序,然后终止主应用程序。

在下面的示例代码中,上面的子程序运行在窗口中(在本例中是NotePad),我不能终止子程序。

代码语言:javascript
复制
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <strsafe.h>
#include <direct.h>
#include <string.h>

int main(int argc, char* argv[])
{   

HWND                hWnd;
STARTUPINFO         sInfo;
PROCESS_INFORMATION pInfo;

ZeroMemory(&sInfo, sizeof(sInfo));
sInfo.cb = sizeof(sInfo);
ZeroMemory(&pInfo, sizeof(pInfo));

if (CreateProcess("C:\\WINDOWS\\System32\\notepad.exe", NULL, NULL, NULL, false, CREATE_NO_WINDOW, NULL, NULL, &sInfo, &pInfo))
{
    printf("Sleeping 100ms...\n");
    Sleep(100);

    DWORD dwExitCode;
    GetExitCodeProcess(pInfo.hProcess, &dwExitCode);

    CloseHandle(pInfo.hThread);
    CloseHandle(pInfo.hProcess);

    }

system("pause");

return 0;

 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-13 09:40:44

记事本窗口显示的原因是它不是控制台应用程序。MSDN说这是关于CREATE_NO_WINDOW

该进程是一个没有控制台窗口正在运行的控制台应用程序。因此,没有设置应用程序的控制台句柄。如果应用程序不是控制台应用程序,或者与CREATE_NEW_CONSOLE或DETACHED_PROCESS一起使用,则忽略此标志。

相反,使用传入的STARTUPINFO

代码语言:javascript
复制
sInfo.dwFlags = STARTF_USESHOWWINDOW;
sInfo.wShowWindow = SW_HIDE;

我相信这会影响记事本的主要功能中WinMain的最后一个参数,但我不确定。

至于为什么记事本不关闭,GetExitCodeProcess实际上并没有结束进程,它只是检索状态。您可以使用TerminateProcess代替:

代码语言:javascript
复制
TerminateProcess(pInfo.hProcess, 0);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14302127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档