我已经用Borland C++编写了一个服务应用程序。效果很好。在ServiceStart(TService *Sender,bool &Started)例程中,我调用mjwinrun来启动一个进程,该进程可以拾取并处理宏。此进程没有UI,任何错误都会记录到文件中。它继续运行,直到服务器重新启动、关闭或使用任务管理器终止进程为止。这是mjwinrun :-
int mjwinrun(AnsiString cmd)
{
  STARTUPINFO mjstupinf; PROCESS_INFORMATION mjprcinf;
  memset(&mjstupinf,0,sizeof(STARTUPINFO)); mjstupinf.cb=sizeof(STARTUPINFO);
  if (!CreateProcess(NULL,cmd.c_str(),NULL,NULL,TRUE,0,NULL,GetCurrentDir().c_str(),&mjstupinf,&mjprcinf))
  {
    LogMessage("Could not launch "+cmd); return -1;
  }
  CloseHandle(mjprcinf.hThread); CloseHandle(mjprcinf.hProcess);
  return mjprcinf.dwProcessId;
}cmd是启动宏队列处理器的命令行。我使用了一个CPU/内存密集型宏,并让它将其时间写入文件。以下是我的发现:-
1)如果宏处理器是在登录会话内从命令行启动的,则无论在哪个Windows内核下运行,宏都在6秒内完成。
2)如果宏处理器是从Vista内核或更早启动的服务(使用上面的mjwinrun )启动的,则宏将在6秒内完成。
3)如果宏处理器是从Windows 7内核或更高版本启动的服务(使用上面的mjwinrun )启动的,则宏将在超过18秒内完成。
我已经为CreateProcess尝试过所有不同的标志,它们都没有区别。我已经尝试了所有不同的帐户为这项服务,这没有任何区别。我试着为任务设置所有不同的优先级,I/O和Page,但它们都没有区别。这就好像服务产生的进程在某种程度上是节流的,不是在I/O方面,而是在CPU/内存使用方面。有什么想法吗? Windows 7的变化是什么?
https://stackoverflow.com/questions/35043542
复制相似问题