我有一个用 Visual C++ 编写的程序,它用 Visual Studio 2005 编译,在 Windows 2003 上运行。
在程序中,它反复调用 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 调用不会返回任何错误。
但是,如果程序是从 Visual Studio 或命令行运行的,那么我没有这个限制。
我尝试更改“登录”选项卡以使用从命令行运行的相同用户帐户,并更改了“允许服务与桌面交互”,但没有发现行为有任何差异。通过查看 CreateProcess API 以及在互联网上进行研究,我无法找到答案。服务产生的进程数量是否有任何限制?