我编写了一个只执行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的区别是什么?
答案 0 :(得分:1)
Java解释器是一个控制台进程。有可能您的程序也是一个控制台进程,因此Java继承并共享您的控制台。这就是为什么你的进程似乎等待Java完成的原因。它实际上没有,只是控制台站在那里。
当您从IDE运行程序时,它可能以特殊方式处理控制台,并在程序完成时使其消失。或者它可能会重定向输出并首先隐藏控制台。
解决方案:使用一些定义的here标志来处理新进程的控制台。试试CREATE_NEW_CONSOLE
或DETACHED_PROCESS
或CREATE_NO_WINDOW
。