开发WINDOWS服务程序

开发步骤:

  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:\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.Run;

  {$ENDIF}

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

开发WINDOWS服务程序的更多相关文章

  1. 关于开发Windows服务程序容易搞混的地方!

    在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的) ...

  2. vs下开发windows服务程序

    一. VS2012下开发Windows服务 1. 打开VS2012,新建项目,选择Windows服务,此处我以开发一个定时自动发送邮件的服务来做介绍,如下图: 2. 创建好后,编译器会自动创建一些文件 ...

  3. Delphi开发Windows服务程序

    开发步骤: 1.New->Other->Service Application 2.现在一个服务程序的框架已经搭起来了 打开Service1窗口,有几个属性说明一下: AllowPause ...

  4. 使用Visual Studio 2015 Community 开发windows服务

    昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享……  1.基础   Windows服务是指系统启动时能够自己运行的程序.W ...

  5. .net开发windows服务

    最近一个月都异常的繁忙,项目进度非常的紧,回头看看自己的blog,整整一个5月都没有一篇文章,非常惭愧,现在补几篇文章,介绍一下我最近关注的技术.这篇文章将介绍Windows服务程序的开发.摘要:本文 ...

  6. .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)

    .net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...

  7. vs2015开发Windows服务

    工作已经很久,时隔这么长时间写这篇文章是给自己以后做参考.也不至于以后长时间不写Windows服务而忘记整个开发过程.windows服务开发,基础的就不说了,直接上过程. 1.新建windows服务项 ...

  8. C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)

    本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...

  9. C#开发Windows服务详细流程

    1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...

随机推荐

  1. 高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

    HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...

  2. Vue指令之`v-if`和`v-show`

    一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗.因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好. <body> < ...

  3. Sqlserver2008[索引]

    SQL索引有两种:聚集索引.非聚集索引 目的:提高sqlserver 系统的性能,加快数据的查询速度与减少系统的响应时间 注意点:一个表只能有一个聚集索引,但可以有多个非聚集索引 索引的存储机制: 聚 ...

  4. canvas圆形进度条(逆时针)

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  5. c语言的函数指针

    简单定义并间接调用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> void singas ...

  6. LightOJ - 1116-Ekka Dokka(思维)

    链接: https://vjudge.net/problem/LightOJ-1116 题意: Ekka and his friend Dokka decided to buy a cake. The ...

  7. div 里面内容水平垂直居中

    css .main{ background: #999999; width: 600px; height: 400px; /*采用flex方式*/ display: flex; /*div内容垂直居中 ...

  8. Java多线程下载初试

    一.服务端/客户端代码的实现 服务端配置config @ConfigurationProperties("storage") public class StoragePropert ...

  9. 008——MATLAB-xlswrite的使用方法

    (一)参考文献:https://blog.csdn.net/liangjiubujiu/article/details/80455753 以矩阵A=[1 2 3 4;5 6 7 8]为例进行介绍 例1 ...

  10. 002_simulink中显示模块中的名字

    (一)Display--->Hide Automatic Names(√去掉)