打开Delphi 7,新建,选择Other->Service Application 修改属性中Name和DisplayName,Name是Service的名称,决定着进程的标识,DisplayName是显示在操作系统里的服务面板里的服务的名称。例如我们将Name修改为NoticeService。

新建一个类,例如名字叫做TNoticeThread,继承自TThread,并重写protected过程Execute。在NoticeService的类定义中添加一个NoticeThread对象。

找到属性的Events选项卡,分别添加OnStart,OnPause,OnContinue,OnStop事件,用这几个事件来控制NoticeThread线程的运行:

代码如下:

  1. unit ufrmMain;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
  5. type
  6. TNoticeThread = class(TThread)
  7. private
  8. protected
  9. procedure Execute; override;
  10. end;
  11. type
  12. TNoticeService = class(TService)
  13. procedure ServiceStart(Sender: TService; var Started: Boolean);
  14. procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  15. procedure ServicePause(Sender: TService; var Paused: Boolean);
  16. procedure ServiceContinue(Sender: TService; var Continued: Boolean);
  17. private
  18. NoticeThread: TNoticeThread;
  19. public
  20. function GetServiceController: TServiceController; override;
  21. end;
  22. var
  23. NoticeService: TNoticeService;
  24. implementation
  25. {$R *.DFM}
  26. procedure ServiceController(CtrlCode: DWord); stdcall;
  27. begin
  28. NoticeService.Controller(CtrlCode);
  29. end;
  30. function TNoticeService.GetServiceController: TServiceController;
  31. begin
  32. Result := ServiceController;
  33. end;
  34. procedure TNoticeService.ServiceStart(Sender: TService;
  35. var Started: Boolean);
  36. begin
  37. NoticeThread := TNoticeThread.Create(False);
  38. Started := True;
  39. end;
  40. procedure TNoticeService.ServiceStop(Sender: TService;
  41. var Stopped: Boolean);
  42. begin
  43. NoticeThread.Terminate;
  44. Stopped := True;
  45. end;
  46. procedure TNoticeService.ServicePause(Sender: TService;
  47. var Paused: Boolean);
  48. begin
  49. NoticeThread.Suspend;
  50. Paused := True;
  51. end;
  52. procedure TNoticeService.ServiceContinue(Sender: TService;
  53. var Continued: Boolean);
  54. begin
  55. NoticeThread.Resume;
  56. Continued := True;
  57. end;
  58. { TNoticeThread }
  59. procedure TNoticeThread.Execute;
  60. begin
  61. inherited;
  62. end;
  63. end.

http://blog.csdn.net/yanjiaye520/article/details/7794550

Delphi 编写系统服务(服务控制线程:开始,暂停,继续,停止)的更多相关文章

  1. SHELL编写NGINX服务控制脚本

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...

  2. Delphi编写系统服务:完成端口演示

    在开发大量Socket并发服务器,完成端口加重叠I/O是迄今为止最好的一种解决方案,下面是简单的介绍:   “完成端口”模型是迄今为止最为复杂的一种I/O模型,特别适合需要同时管理为数众多的套接字,采 ...

  3. 在Delphi开发的服务中调用指定应用程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fxh7622.blog.51cto.com/63841/529033 在很多时候 ...

  4. DELPHI编写服务程序总结(在系统服务和桌面程序之间共享内存,在服务中使用COM组件)

    DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...

  5. 利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)

    利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复 打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印 打印过程中有2个线程:一个是程序运行的主线程, ...

  6. DELPHI编写服务程序总结

    DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...

  7. C#编写window服务,一步一步(1)

    Window服务是啥,这里就不废话了,如何用在哪里用也不废话了,这里我这篇文章只是详述了我在vs2012中创建window服务的经过,希望对你有所帮助. 另外:我在编写服务过程中参考了 Profess ...

  8. C# 编写Window服务基础(一)

    一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT.Windows 2000和Windows XP等操作系统下用户环境以外的程序.在以前,编写Wind ...

  9. 使用C语言编写windows服务一般框架

    原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册, ...

随机推荐

  1. java 获取随机数的三种方法

    方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1))例:(int)(1+Math.random()*(10-1+1))从1到10的int型随数 方法2获得随机数for (i ...

  2. 12.04 如何更专业的使用Chrome开发者工具

    顾名思义Chrome开发工具就是一个工具,它允许Web开发人员可以通过浏览器应用程序干预和操作Web页面,也可以通过这个工具调试和测试Web页面或Web应用程序.有了这个工具,你可以做很多有趣的事情: ...

  3. JS HTML DOM

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过 ...

  4. sharepoint 自定义字段实现省市联动

    最后实现效果如下:设置栏如下:解决方案结构如下: fldtypes_RoyCustomField.xml 内容如下: <?xml version="1.0" encoding ...

  5. Uploadif稍做扩展使用

    文章出自Uploadify扩展配置使用http://www.wuyinweb.com/doc/52/57.aspx 在做项目中涉及多文件上传,经过筛选,选择了Uploaidify,但还涉及一个问题,就 ...

  6. webservice跨域上传图片

    1.上传文件,在一般处理程序中处理 //1.接收post过来的文件 HttpPostedFile file = context.Request.Files[]; || file.ContentLeng ...

  7. js 去除字符串左右两端的空格

    <script type="text/javascript"> function trim(str){ //删除左右两端的空格      return str.repl ...

  8. 2015 5.16 C# 继承和多态

    类的层次结构有两种基本的构造方式  自顶向下  自底向上 基类的保护成员是指允许派生类的方法代码访问,而不是指通过派生类的对象访问 如果基类中的字段通过公有且可读写的属性进行了封装,那么建议将字段定义 ...

  9. SqlServer 2015修改表时出现“save changes is not permitted…”的解决方法

    使用SqlServer 2015的过程中,会出现如下情况: 在修改完表字段名或是类型后点击保存时会弹出一个对话框,且无法保存已做的修改.对话框内容大致如下: Saving changes is not ...

  10. java线程的使用(Runnable)

    在实际项目开发过程中,线程是经常要用到的,特别是为了不影响项目的运行效果. 以下就以实际项目中的简单例子来介绍: public class SystemRedisInfoController exte ...