编写Windows服务疑问2:探索服务与安装器的关系

首先,来弄两个服务,一个叫“飞机”,一个叫“火车”。

    public class FeiJiService : ServiceBase
    {

        public FeiJiService()
        {
            ServiceName = "Fei_ji";
        }

    }

    public class HuoCheService : ServiceBase
    {
        public HuoCheService()
        {
            ServiceName = "Huo_che";
        }
    }

用于演示,服务很单,接着,匹配安装器。

    [RunInstaller(true)]
    public class SelfInstaller : Installer
    {
        public SelfInstaller()
        {
            ServiceInstaller fjinstaller = new ServiceInstaller();
            fjinstaller.ServiceName = "Fei_ji";
            fjinstaller.Description = "国产飞机 -- 008";
            fjinstaller.DisplayName = "飞机";
            Installers.Add(fjinstaller);

            ServiceProcessInstaller processinstaller = new ServiceProcessInstaller();
            processinstaller.Account = ServiceAccount.LocalSystem;
            Installers.Add(processinstaller);
        }
    }

这里我捣了个鬼,只安装了“飞机”服务,“火车”服务没有安装。

最后,偏偏在Main入口点处运行两个服务。

        static void Main()
        {
            ServiceBase[] svs =
            {
                    new FeiJiService(),
                    new HuoCheService()
                };
            ServiceBase.Run(svs);
        }

咱们就是来验证一下,没有被安装的服务到底能不能运行。

现在,执行installutil xxx.exe进行安装,安装后,在服务管理器中只看“飞机”,没看到“火车”。

显然,目前只能启动“飞机”服务,而“火车”服务不在服务列表中。

看来,只有安装后的服务才能启动。

下面,再次修改安装器代码,把“火车”服务也安装上。

        public SelfInstaller()
        {
            ServiceInstaller fjinstaller = new ServiceInstaller();
            fjinstaller.ServiceName = "Fei_ji";
            fjinstaller.Description = "国产飞机 -- 008";
            fjinstaller.DisplayName = "飞机";
            Installers.Add(fjinstaller);

            ServiceInstaller hcinstaller = new ServiceInstaller();
            hcinstaller.ServiceName = "Huo_che";
            hcinstaller.Description = "国产列车";
            hcinstaller.DisplayName = "火车";
            Installers.Add(hcinstaller);

            ServiceProcessInstaller processinstaller = new ServiceProcessInstaller();
            processinstaller.Account = ServiceAccount.LocalSystem;
            Installers.Add(processinstaller);
        }

然后,把刚才安装的服务卸载掉,执行installUtil /u xxx.exe。

接着再次生成项目,并进行安装,然后,在服务管理器中就看到两个服务了。

这么个简单的实验,再次验证了:一个服务安装器只能用于安装一个服务,一个服务必须进行安装后才能启动

示例代码下载地址

时间: 2024-10-13 08:25:55

编写Windows服务疑问2:探索服务与安装器的关系的相关文章

编写Windows服务疑问1:操作过程

Windows 服务开发平时不太受人关注,毕竟那是高大上的项目类型,平常需求也用不上,很多老掉牙的家伙也只知有WinForm,仍不知有WPF,更别说Windows 服务了,正如淘渊明所写的,“不知有汉,无论魏晋”. 通常,就算要让程序开机启动,多数也只考虑设置一个启动项,也很少去想到开发Windows服务.如果程序需要自动启动,并且希望在后台完成一些东东,其实使用Windows服务也不错的. 正因为用的人少,那么说的人更少了,使得不了解它,想学又找不到资料的人也多.没事,老周没什么资本,唯一值得

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

原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册,否则会导致服务启动失败.因近期写个服务,其中遇到一些有问题,有部分内容想和大家分享一下,请大家指正. windows服务一般框架代码如下: #include <Windows.h> #include <tchar.h> VOID WINAPI ServiceHandler(DWORD

c# 编写windows 服务,并制作安装包

对服务的认识有很多个阶段. 第一阶段:当时还在用c++,知道在一个进程里while(True){},然后里面做很多很多事情,这就叫做服务了,界面可能当时还用Console控制台程序. 第二阶段:知道了服务要在后台执行,一般不会有界面显示,并且开机自启动,于是隐藏Console控制台界面,并且通过使用SC CREATE 将exe变为服务,并且达到开机自启动的目的.这时候还是c++ 阶段. 第三阶段:因项目需求接触c#,发现有个叫项目模板专门制作windows 服务,尝试了下,感觉还不错,省事了许多

C#编写Windows服务程序 (服务端),client使用 消息队列 实现淘宝 订单全链路效果

需求: 针对 淘宝提出的 订单全链路 产品接入 .http://open.taobao.com/doc/detail.htm?id=102423&qq-pf-to=pcqq.group oms(订单管理系统) 实现  , 完毕后 效果:在千牛工作台 --订单全链路  可看到效果例如以下图   -------------------------------------------------------------------------------------------------------

C#编写Windows服务

一.Windows服务介绍: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一 般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式.这些启动方式包括了自动启动和手动启动两种.对于自动启动的Windows服务程序,它 们在Windows启动或是重启之后用户登录之前就开始执行了.只要你将相应的Windows服务程序注册到服务控制管理器(Service Control Manager)中,并将其启动类别

C#编写Windows服务程序 (服务端),客户端使用 消息队列 实现淘宝 订单全链路效果

需求: 针对 淘宝提出的 订单全链路 产品接入 .http://open.taobao.com/doc/detail.htm?id=102423&qq-pf-to=pcqq.group oms(订单管理系统) 实现  , 完成后 效果:在千牛工作台 --订单全链路  可看到效果如下图   ---------------------------------------------------------------------------------------------------------

使用普通Windows服务创建Quartz.Net服务项目

使用普通Windows服务创建Quartz.Net服务项目 首先创建Quartz.Net.2.0解决方案,添加 Windows服务 项目,添加安装程序,修改服务运行账户类型为LocalSystem(默认为User) 添加C5.dll.Common.Logging.dll.Common.Logging.Log4Net.dll.log4net.dll.Quartz.dll引用 C5.dll 一个C#和其他CLI语言的泛型集合类..Net2.0及以上才可以使用.简介地址:http://www.itu.

Windows Server 2012配置L2TP服务环境

在上一篇文章<Windows Server 2012配置VPN服务环境>中讲解了在Windows Server2012环境中的基础VPN搭建,但是只能支持PPTP的VPN连接.这篇文章进一步完善了VPN基于L2TP的连接讲解. 在百度上也没有找到一个Windows2012 很全的L2TP服务搭建的方案,所以自己编辑了一个给有需要的朋友们参考. 准备环境:Windows Server 2012R2 数据中心版64位,基础的VPN服务环境已经搭建完成. 功能需求:完善VPN服务器来支持L2TP类型

windows apache 配置多个服务站点

原文 方法一:多个APACHE服务 更改第一个站点的根目录: 在文件Apache2.2/conf/httpd.conf中查找 DocumentRoot 属性,将后面的路径改为你的主站点的路径, 如:D:/www/web1 为第二个Apache服务建立配置文件: 复制并重命名httpd.conf为web2.conf(举个例子而已,也可以叫my.conf等等), 修改 web2.conf中的 Listen 8080(原来为80) ServerName localhost:8080(原来为80) Do