CreateProcess阻塞 - 奇怪的行为

时间:2012-02-13 09:32:17

标签: c++ blocking createprocess

我编写了一个只执行java -jar的应用程序。我希望启动应用程序在执行CreateProcessA后立即退出。

LPSTR _cmdupdate = const_cast<char *> (cmdupdate.c_str());
STARTUPINFO info = {sizeof (info)};
ZeroMemory(&info,sizeof(info));
info.cb=sizeof(info);
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo,sizeof(processInfo));
CreateProcessA(TEXT(java_exe.c_str()), _cmdupdate, NULL, NULL, false, 0, NULL, TEXT("bin"), &info, &processInfo);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
exit(0);

如果我通过IDE(Netbeans 7)执行此操作,一切正常:java在启动器终止时继续运行。 如果我通过双击它运行相同的exe:java启动jar,但是启动器等待java进程退出。

那么当通过IDE运行而不是独立运行时,CreateProcess的区别是什么?

1 个答案:

答案 0 :(得分:1)

Java解释器是一个控制台进程。有可能您的程序也是一个控制台进程,因此Java继承并共享您的控制台。这就是为什么你的进程似乎等待Java完成的原因。它实际上没有,只是控制台站在那里。

当您从IDE运行程序时,它可能以特殊方式处理控制台,并在程序完成时使其消失。或者它可能会重定向输出并首先隐藏控制台。

解决方案:使用一些定义的here标志来处理新进程的控制台。试试CREATE_NEW_CONSOLEDETACHED_PROCESSCREATE_NO_WINDOW