5

CreateProcess(...)を使用してプロセスを実行し、別のコンソールウィンドウで個別に実行しようとしています。

system( "...")関数を使用してこれを実現できますが、CreateProcessを使用すると、環境と作業ディレクトリを指定したり、プロセスのハンドルを取得したり、必要に応じてstdin/outをパイプしたりできるので好まれます。に。

私がインターネットで見つけたのは逆問題です。それは、追加のコンソールウィンドウを持っていて、それらを取り除きたいという人々です。以前のバージョンのWindowsでは、新しいコンソールウィンドウを開いて表示するのは正常な動作だったようです。

現在、「cmd.exe / c ...」を実行しても、追加のウィンドウを取得できません。

STARTF_USESHOWWINDOWフラグを使用してみましたが運がありませんでした。

誰かがこの問題を抱えていましたか?

PS:GUIウィンドウが表示されます。notepad.exeが正常に表示されます。

これは私のコードです(本質的に)

PROCESS_INFORMATION processInfo;
STARTUPINFOA startupInfo;
ZeroMemory(&startupInfo,sizeof(startupInfo));
startupInfo.dwFlags |= CREATE_NEW_CONSOLE;
startupInfo.dwFlags |= DETACHED_PROCESS;
ok&=CreateProcessA( NULL,
    const_cast<char*>(comand.c_str()), // safe for CreateProcessA
    NULL, NULL, TRUE, NULL, NULL, NULL,
    &startupInfo, &processInfo);

C:/Windows/system32/cmd.exe / c helpを実行しようとしています。プログラムが実行され、パイプからの出力を読み取ることができます。まだウィンドウがありません。

4

2 に答える 2

16
于 2013-09-16T14:52:10.797 に答える
2

を呼び出すときにCREATE_NEW_CONSOLE渡します。私はテストしていませんが、これによりコンソールウィンドウが強制的に作成されると思われます(おそらく非コンソールプロセスの場合でも?)代わりに、親コンソールから切り離すだけの方法を使用することもできます。dwCreationFlagsCreateProcessDETACHED_PROCESS

于 2013-02-19T13:33:47.050 に答える