.Net实现Windows服务安装完成后自动启动的两种方法
考虑到部署方便,我们一般都会将C#写的Windows服务制作成安装包。在服务安装完成以后,第一次还需要手动启动服务,这样非常不方便。
方法一:在安装完成事件里面调用命令行的方式启动服务
设置serviceProcessInstaller1控件的Account属性为“LocalSystem”
设置serviceInstaller1控件的StartType属性为"Automatic"
- /// <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 在这里扮演了一个调用者的角色。
.Net实现Windows服务安装完成后自动启动的两种方法的更多相关文章
- Windows服务安装完成后自动启动
		
public ServiceInstaller() { //... Installer code here this.AfterInstall += new InstallEventHandler(S ...
 - [转].Net Windows服务安装完成后自动启动
		
本文转自:http://www.cnblogs.com/hb_cattle/archive/2011/12/04/2275319.html 考虑到部署方便,我们一般都会将C#写的Windows服务制作 ...
 - centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节课
		
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
 - Win8.1RTM英文版安装中文语言包的两种方法
		
Windows 8.1和Windows Server 2012 R2 RTM出来了,下载了个英文版的安装上了,发现远景上有朋友提供中文语言包,以下提供两种语言包的安装方法: 一.使用lpksetup命 ...
 - windows 7中添加新硬件的两种方法(本地回环网卡)
		
最近在windows7上使用VMwareWorkstation7玩一些实验,遇到需要配置不同网络的问题. 因为在windows2003server上习惯使用要本地回环网卡了,那就想着在Windows7 ...
 - pip安装使用国内源的两种方法
		
pip安装后使用pip安装第三方库默认是国外源,一般安装慢连接不稳定,等得花儿都谢了,结果还告诉你安装失败..../(ㄒoㄒ)/~~ 这时我们就要想想其它办法啦,毕竟不能强求 国外不行,就只有国内了赛 ...
 - iManager微服务自定义上传数据的两种方法
		
背景 当数据量大时,通过浏览器上传可能速度较慢,可以使用以下两种方式进行数据导入. 方法一 1.访问k8s主页(31234端口) 找到所创建的微服务的命名空间(例如icloud-native-xxx) ...
 - sublime 快速安装多个插件的两种方法[Advanced Install Package]与[Package Control.sublime-settings]
		
环境 sublime 3,目前官网下载的sublime3 已经支持自动安装 Package Control . 第一种: ctrl+shift+p 调出命令面板以后 以前都是使用 Package Co ...
 - 学习windows编程 day3 之 自定义画笔的两种方法
		
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
 
随机推荐
- bbs项目中对反向查询和分组查询的具体的应用
			
我的数据库是按照下面的图片的方式设计的 然后看下model中代码 class User(models.Model): uid = models.AutoField(primary_key=True) ...
 - spring cloud  ribbon和feign的区别
			
spring cloud的Netflix中提供了两个组件实现软负载均衡调用:ribbon和feign. Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器 它可以在客户端配置 ribb ...
 - GridView创建菜单栏
			
GridView(网格视图)可以用来做九宫图.表格(行列)的视图,因其是网格状的,不用去调整权重,而且单个item可以自定义,因此也可以用来创建菜单栏(图标加文字形式),布局就一个GridView. ...
 - 用java修改文件的编码
			
1.将本地的文件转换成另外一种编码输出,主要逻辑代码如下: /** * 将本地文件以哪种编码输出 * @param inputfile 输入文件的路径 * @param outfile 输出文件的路径 ...
 - python 数据类型 之      利用 dict 模仿 switch语句功能
			
Python本身并不提供Switch的语法功能,为了能够解决类似switch分支需求的问题,我们可以使用字典代替实现. 解决思路: 利用字典取值的get方法的容错性,处理switch语句中的defau ...
 - springBoot整合Quarzt2.3
			
首先,你要配置好springboot的配置(在resources下) 我把其改为application.yml # Tomcat server: tomcat: uri-encoding: UTF-8 ...
 - vs2015未能计算子级
			
数据源 属性里边值 设置出现问题
 - 改变dos的编码方式
			
chcp 936 改变成 gbk chcp 65001 改成 utf-8 删除MySqlite文件 generic_x86:/data/data/com.example.lifen.sqlite/da ...
 - vs视图引入命名空间设置方法
			
解决: 1.@using在cshtml的最上面,加上一句: @using Puzzle.Framework.Common 2.在View文件夹下面的web.config里面加: <system. ...
 - [Robot Framework] 通过SikuliLibrary可以获取到图片,但是点击失效
			
执行时,可以看到鼠标已经移动到图片上了,但是点击失效,日志也没有报错 后来发现是windows权限的问题. 通过打开Control Panel->System and Security-> ...