未分类 · 2023年11月23日 0

开发Windows服务中的注意事项

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

假如新开发的服务程序名字为: MyService.exe

安装服务 MyService.exe /install
启动服务 net start MyService
停止服务 net stop MyService
卸载服务 MyService.exe /uninstall
Pascal

服务的运行逻辑

  • 创建逻辑
03-26 17:18:17.600|[DEBUG] | ServiceCreate
03-26 17:18:17.600|[DEBUG] | ServiceBeforeInstall
03-26 17:18:17.618|[DEBUG] | ServiceAfterInstall
03-26 17:18:18.620|[DEBUG] | ServiceDestroy
Pascal
  • 启动逻辑
03-26 17:18:22.122|[DEBUG] | ServiceCreate
03-26 17:18:22.124|[DEBUG] | ServiceStart
03-26 17:18:22.124|[DEBUG] | ServiceExecute
Pascal
  • 停止逻辑
03-26 17:18:42.298|[DEBUG] | ServiceStop
03-26 17:18:42.298|[DEBUG] | ServiceDestroy
Pascal
  • 删除逻辑
03-26 17:18:48.277|[DEBUG] | ServiceCreate
03-26 17:18:48.277|[DEBUG] | ServiceBeforeUninstall
03-26 17:18:48.286|[DEBUG] | ServiceAfterUninstall
03-26 17:18:49.099|[DEBUG] | ServiceDestroy
Pascal

其中 ServiceExecute 中需要有循环,否则启动后直接退出

procedure TYQSHService.ServiceExecute(Sender: TService);
begin
  PostLog(llDebug, 'ServiceExecute');
  while not Terminated do
  begin
    Sleep(10);
    PostLog(llDebug, 'ServiceExecute Loop');
    ServiceThread.ProcessRequests(False);
  end;
end;
Pascal