博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
注册服务程序
阅读量:4657 次
发布时间:2019-06-09

本文共 1577 字,大约阅读时间需要 5 分钟。

开发步骤:

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);  这句实际上需要移动到 dpr文件中。
FmMain.show;
end;

OnStop的代码

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
FmMain.Free;
end;
这样在服务启动的时候就会显示出新建的那个窗体
4、编译完成后,我们可以安装服务了,安装方法为:
在cmd窗口中执行 appname /install,
如F:\Book\DService\Project1.exe /install
这样服务就安装完成了
5、同样,删除时也是在cmd窗口输入命令 appname /uninstall
如F:\Book\DService\Project1.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.CreateForm(TFmMain, FmMain);//经过实验 这里需要创建窗体 在service的 start 中创建不好使。

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

转载于:https://www.cnblogs.com/echomyecho/archive/2012/05/21/2512009.html

你可能感兴趣的文章
IDEA解决从git上clone代码没有maven依赖的问题
查看>>
fatal: the remote end hung up unexpectedly
查看>>
Delphi-操作剪贴板
查看>>
hdu 1029
查看>>
Docker 容器的网络连接 & 容器互联
查看>>
吾爱专题脱壳练习----压缩壳练习之三
查看>>
LeetCode -- Palindrome Linked List
查看>>
栈应用——逆波兰式表达式的值
查看>>
vscode 快速生成html
查看>>
python中session的使用
查看>>
在互联网行业断断续续这四年间
查看>>
Microsoft Office 无法验证此应用程序的许可证
查看>>
Sql Server查询表内重复字段的个数
查看>>
IOS之GCD记录
查看>>
关于NSURLSessionDownloadTask下载大文件
查看>>
spring boot 基础学习(一)
查看>>
JavaScript的==和===运算符
查看>>
linux基础三---网络基础&软件包管理
查看>>
css样式
查看>>
xpath
查看>>