Visual Studio 2005 でコンパイルされ、Windows 2003 で実行される Visual C++ で書かれたプログラムがあります。
プログラム内で、CreateProcess を繰り返し呼び出して、次のパラメーターを使用して、スリープ状態と画面へのメッセージの表示を繰り返すだけのプログラムを起動します。
CreateProcess(app_pathname, (char*) full_app_name.chars(),
NULL, NULL, FALSE, CREATE_NEW_CONSOLE, 0, 0, &si, &pi)
提供された si には次のものがあります。
memset( &si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags |= STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWDEFAULT;
si.lpTitle = (char*) cmdLine;
私が観察したことは、このプログラムをサービスから実行すると、124 を超えて新しいプロセスが起動されず、CreateProcess() API 呼び出しからエラーが返されないことです。
ただし、プログラムがビジュアル スタジオまたはコマンド ラインから実行された場合、この制限はありません。
コマンドラインから実行しているのと同じユーザーアカウントを使用するように「ログオン」タブを変更しようとしましたが、「デスクトップとの対話をサービスに許可する」を変更しましたが、動作に違いは見られませんでした。CreateProcess API を調べたり、インターネットで調査したりしても、これに対する答えを見つけることができませんでした。サービスによって生成されるプロセスの数に制限はありますか?