专栏首页跟着阿笨一起玩NET.Net Windows服务安装完成后自动启动

.Net Windows服务安装完成后自动启动

考虑到部署方便,我们一般都会将C#写的Windows服务制作成安装包。在服务安装完成以后,第一次还需要手动启动服务,这样非常不方便。查阅了网上的一些资料,发现有一种方法是在安装完成事件里面调用命令行的方式启动服务,这种方式虽可行,但觉得不够完美。好了,下面来看看如何更好地做到服务自动启动。

    1、重写ProjectInstaller的Commit方法

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.ServiceProcess;


namespace CleanExpiredSessionSeivice
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }

        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);
            //Auot start service after the installation is completed
            ServiceController sc = new ServiceController("CleanExpiredSessionSeivice");
            if (sc.Status.Equals(ServiceControllerStatus.Stopped))
            {
                sc.Start();
            }
        }
    }
}

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

    2、在服务安装项目中添加名为 Commit的 Custome Action

     在服务安装项目上右击,在弹出的菜单中选择View — Custom Actions

然后在Commit项上右击,选择Add Custom Action…,在弹出的列表框中选择Application Folder。最终结果如下:

需要注意的是,第二步操作是必不可少的,否则服务无法自动启动。我的个人理解是Commit Custom Action 会自动调用ProjectInstaller的Commit方法,Commit Custom Action 在这里扮演了一个调用者的角色。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#如何快速高效地导出大量数据?

    本文转载:http://www.cnblogs.com/herbert/archive/2010/07/28/1787095.html

    跟着阿笨一起玩NET
  • __dopostback的用法

    转载:http://blog.csdn.net/fwj380891124/article/details/8819926

    跟着阿笨一起玩NET
  • datagridview显示行号

    另一种也是在这个事件下面下面 用了个for循环来做index+1的单元格赋值,效率太慢了。

    跟着阿笨一起玩NET
  • JavaScript中的日期处理注意事项

    在业务逻辑比较多的系统里面,一般都会涉及到日期的处理。包括选择起始日期和结束日期,结束日期要大于起始日期,日期的显示和输入等。 输入这一块基本都是使用jQuer...

    八哥
  • 【猫狗数据集】保存训练模型并加载进行继续训练

    发现数据集没有完整的上传到谷歌的colab上去,我说怎么计算出来的step不对劲。

    西西嘛呦
  • Burp Suite 2.1.05专业版本的破解与汉化

    2019年11月1日,PortSwigger官方发布了Burp Suite Professional 2.1.05最新版本,第一时间给大家分享Burp ...

    洛米唯熊
  • Git Reset命令

    Git分为三个区: 工作区(Working Directory):没有修改、修改后未使用git add的文件 暂存区(Staged):新增/修改后的文件调用...

    None_Ling
  • 打车平台Lyft获Magna 2亿美元投资,携手打造自动驾驶汽车

    “如果要增加到80%,”打车平台Lyft CEO Logan Green认为,“还得等到自动驾驶时代的到来。”

    量子位
  • mysql用户管理,常用sql语句,mysql数据库备份恢复

    叶瑾
  • RTT 是如何管理和构建工程的?

    rtthread 是一个功能强大,组件丰富的物联网操作系统。它相比于其他的 RTOS 的一个主要区别之一,也就是它不仅仅是一个实时内核,还具备丰富的中间层组件。...

    wenzid

扫码关注云+社区

领取腾讯云代金券