.Net实现Windows服务安装完成后自动启动的两种方法

考虑到部署方便,我们一般都会将C#写的Windows服务制作成安装包。在服务安装完成以后,第一次还需要手动启动服务,这样非常不方便。

方法一:在安装完成事件里面调用命令行的方式启动服务

此操作之前要先设置下两个控件 设置serviceProcessInstaller1控件的Account属性为“LocalSystem” 设置serviceInstaller1控件的StartType属性为"Automatic"

在服务器上添加安装程序,在private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)事件中,添加以下代码:

/// <summary> 
 /// 安装后自动启动服务 
 /// </summary> 
 /// <param name="sender"></param> 
 /// <param name="e"></param> 
 private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)  
    {  
        Process p = new Process  
        {  
            StartInfo =  
            {  
                FileName = "cmd.exe",  
                UseShellExecute = false,  
                RedirectStandardInput = true,  
                RedirectStandardOutput = true,  
                RedirectStandardError = true,  
                CreateNoWindow = true 
            }  
        };  
        p.Start();  
 const string cmdString = "sc start 银医通服务平台1.0"; //cmd命令,银医通服务平台1.0为服务的名称 
        p.StandardInput.WriteLine(cmdString);  
        p.StandardInput.WriteLine("exit");  
    }  

查阅了网上的一些资料,这种方式虽可行,但觉得不够完美。好了,下面来看看如何更好地做到服务自动启动。

方法二:使用ServiceController对象

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);  
            ServiceController sc = new ServiceController("银医通服务平台1.0");  
 if(sc.Status.Equals(ServiceControllerStatus.Stopped))  
            {  
                sc.Start();  
            }  
        }  
    }  
}  

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

C#创建Windows Service(Windows 服务)基础教程

Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的。所以本文也就产生了,本文不会写复杂的东西,完全以基...

551
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-库存查询模块

回顾与说明     前面我就用了大量的篇幅我讲解了“商品入库”模块,在商品入库模块之中,我们介绍 了与之相关的管理信息系统开发中的一个共性场景,以及这个应用场景...

1856
来自专栏bboysoul

信息收集工具(Th3inspector Tool)安装使用体验

https://github.com/Moham3dRiahi/Th3inspector

1063
来自专栏逸鹏说道

NET跨平台:在Ubuntu下搭建ASP.NET 5开发环境

0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了。最近工作上有个小功能要做成Web应...

2793
来自专栏刘望舒

Android事件总线(一)EventBus3.0用法全解析

前言 EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者...

2439

Centry 7上的Garry's Mod

Garry's Mod可以完全控制和修改视频游戏引擎——起源引擎。你几乎可以使用Garry's Mod制作任何你想要的游戏。架设Garry's Mod服务器是在...

983
来自专栏Theo Tsao

Ionic3学习笔记(十三)HttpClient 实现 HTTP 请求以及踩过的一些坑

当然是基于这篇古老的文章啦 ==> http://www.jianshu.com/p/9855610eb1d4 因为是2015年的文章,已经时隔2年多,很难确保...

3271
来自专栏小白安全

Windows-Exploit-Suggester --- Windows下提权辅助工具

此工具是一款非常好用的Windows下提权辅助工具(已经支持Windows 10下的提权了),国内已经有许多人在用了,但是一直没有相应的中文文档,所以我特地...

2835
来自专栏肖洒的博客

模拟登陆我终于还是进了

爬了这么久的教务处,终于还是绕过了千山万水登进来了。 这段时间准备期末考,忙,好久不更博。 年终总结也没有写。 是时候开更啦!

1032
来自专栏有趣的Python

程序员装机必备爆款软件推荐与配置(windows版)

做机也要做一只全能的机哦 值此新年来临之即,面对两百多个G的c盘。忍痛割爱将电脑系统重装,版本为(win10:1079)之后的所有电脑环境更新,专业软件安装均会...

4083

扫码关注云+社区