我尝试以交互模式运行bash.exe作为子进程。我发现这样做的唯一方法是从控制台程序启动bash.exe,或者从AllocConsole()启动到非控制台程序,然后启动它。似乎如果它没有从控制台程序启动,或者至少是已经分配了控制台的程序,bash.exe拒绝以交互模式启动。
由于基本程序必须是GUI程序,我必须使用AllocConsole。但是,如果我这样做,这将创建一个可见的控制台。这对于我正在建设的计划来说是不可接受的。
我知道如何创建隐藏的子进程,但是弹出的控制台来自AllocConsole,而不是CreateProcess。有很多这样的问题,但大多数问题以解决方法结束,似乎我的情况排除了我能找到的所有解决方法。
如何在没有控制台出现的情况下使用AllocConsole?如果不这样做,如何在交互模式下将bash.exe作为GUI程序的子进程启动,而不使用AllocConsole?
答案 0 :(得分:0)
siStartInfo.wShowWindow = SW_HIDE;
siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
BOOL success = CreateProcess(
applicationAddress, // absolute path to the application
TEXT("-i"), // command line
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // handles are inherited
CREATE_NEW_CONSOLE, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&piProcInfo); // receives PROCESS_INFORMATION