开发步骤:

1、New->Other->Service Application

2、现在一个服务程序的框架已经搭起来了

打开Service1窗口,有几个属性说明一下:

AllowPause:是否允许暂停

AllowStop: 是否允许停止

Dependencies: 设置服务的依存关系,服务的启动是否依赖于某个服务或者组

DisplayName: 在“服务”窗口显示的名称

Interactive: 设置为true时可以和Windows桌面进行交互,如果我们想在服务里显示窗体的话此设置就要设置为true,

另外ServiceType必须为stWin32

Password: 密码

StartType: 启动方式

3、如果我们想让服务与窗体交互,步骤如下:

在工程中新建一个窗体fmMain 然后在Service1的OnStart中写代码

procedure  TService1.ServiceStart(Sender: TService; var Started:  Boolean);

begin

Started := True;

Svcmgr.Application.CreateForm(TFmMain,  fmMain);

FmMain.show;

end;

OnStop的代码

procedure TService1.ServiceStop(Sender: TService; var Stopped:  Boolean);

begin

Stopped :=  True;

FmMain.Free;

end;

这样在服务启动的时候就会显示出新建的那个窗体

4、编译完成后,我们可以安装服务了,安装方法为:

在cmd窗口中执行 appname /install, 如F:BookDServiceProject1.exe  /install 这样服务就安装完成了

5、同样,删除时也是在cmd窗口输入命令 appname  /uninstall 如F:BookDServiceProject1.exe /uninstall

关于其他:

1、关于服务程序的调试 如果我们开发的服务有多个窗体,程序的调试无疑是个大问题 其实服务程序稍微一改就能改成一个标准的Win32工程,为了防止不停的变来变去,我们可以加上一个编译条件,通过编译条件来切换生成服务程序还是普通可执行程序,假设编译条件为 NormalApp,在以下几个地方需要加入编译条件 工程文件中,单元的引用

{$IFDEF  NormalApp}

Forms,

{$ELSE} SvcMgr,

{$ENDIF}

工程初始化

{$IFDEF  NormalApp}

Application.Initialize;

Application.CreateForm(TFmMain,  FmMain);

Application.Run;

{$ELSE}

if not Application.DelayInitialize or  Application.Installing  then

Application.Initialize;

Application.CreateForm(TService1,  Service1);

Application.Run;

{$ENDIF}

这样我们就可以通过增加/删除NormalApp的编译条件来切换服务程序和普通窗口程序了

最新文章

  1. ASP.NET之纠错
  2. 关于GC和析构函数的一个趣题
  3. SQL Server SQL分页查询
  4. Swift方法实现回调的一种方式
  5. 在Unity中如何取得一个Box的Bounds
  6. ServiceBroker创建流程
  7. Yii 1.1 DAO绑定参数实例
  8. sybase下convert函数第三个参数(时间格式)
  9. P107、面试题15:链表中倒数第K个结点
  10. hdu 2079 选课时间(题目已修改,注意读题)
  11. c# 搭建服务端 常用的Helper(5)
  12. MongoDB基础教程系列--第七篇 MongoDB 聚合管道
  13. JQuery-基础学习1
  14. Winsock网络编程笔记(2)----基于TCP的server和client
  15. 关于scrapy的piplines
  16. docker-lnmp dockerfile
  17. 隐藏"Input"标签默认样式
  18. webStorm 快捷键 + 浏览器
  19. superset链接本地mysql数据库
  20. 微信小程序自制提示框(具有输入文本功能)

热门文章

  1. 深入javascript
  2. 百度地图 api 功能封装类 (ZMap.js) 新增管理事件功能 [源码下载]
  3. Opentack常用技巧
  4. codevs 1082 线段树练习3 模板题
  5. codevs1227 方格取数2 注意数组啊啊啊啊啊啊啊啊啊啊
  6. Oracle分页查询语句
  7. NOIP2014 day2 T2 洛谷P2296 寻找道路
  8. linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
  9. IDEA 从SVN检出项目相关配置
  10. JDBCTemplate基础学习