最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作不成功,可能是开发环境或项目配置的不同,这里把自己成功制作的方式贴出来,一方面留给自己,一方面也希望能给遇到同样问题绝望中不能自拔、以致失去灵魂的路人甲,路人乙一还魂丹 . . .

IDE :WIN2003  VS2008  SQL2005

一、创建window服务项目

首先我们建一个window服务项目 :解决方案(右击)——> 增加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:

二、编写Window服务程序

向导向工程文件中增加Service1.cs类:
其中各属性的含意是:
Autolog                 是否自动写入系统的日志文件
CanHandlePowerEvent     服务时候接受电源事件
CanPauseAndContinue          服务是否接受暂停或继续运行的请求
CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程  CanStop                              服务是否接受停止运行的请求
ServiceName                       服务名

创建后会生成两个文件 Program.cs 和 Service1.cs ,其中 program.cs 这个文件不用动,里面已自动生成好了。我们在Service1.cs里增加所要的操作,里面有两个重写方法 OnStart 和 OnStop ,OnStart 方法表示服务启动的操作,OnStop 表示服务停止的操作,下面写了一个简单示例 :当服务启动后,调用远程一个WebService的Hello函数,并把返回的值写入到一个文件中。code如下:

/// <summary>/// 服务启动的操作/// </summary>/// <param name="args"></param>protected override void OnStart(string[] args)  {StartHello();}/// <summary>/// 服务停止的操作/// </summary>protected override void OnStop(){try{ThreadHello.Abort();Flag = false;System.Diagnostics.Trace.Write("线程停止");}catch (Exception ex){System.Diagnostics.Trace.Write(ex.Message);}}private Thread ThreadHello;private void StartHello(){try{// 标准形式//ThreadStart NewThreadStart = new ThreadStart(VoidName);//Thread NewThead = new Thread(NewThreadStart);//NewThead.Start();ThreadHello = new Thread(new ThreadStart(Hello));ThreadHello.Start();System.Diagnostics.Trace.Write("线程任务开始");}catch (Exception ex){System.Diagnostics.Trace.Write(ex.Message);throw ex;}}private void Hello(){while (Flag){localhost.AdvService la = new WindowsService1.localhost.AdvService();try{string helloname = la.Hello("Andy"); // 调用远程WebService中的方法writeInLog(helloname, false);   // 把调用返回的数据写入到文件中}catch (Exception ex){System.Diagnostics.Trace.Write(ex.Message);throw ex;}Thread.Sleep(5000);}}/// <summary>/// 写入文件操作/// </summary>/// <param name="msg">写入内容</param>/// <param name="IsAutoDelete">是否删除</param>private void writeInLog(string msg, bool IsAutoDelete){try{string logFileName = @"E:\Sample\PG_Sample\log.txt"; // 文件路径FileInfo fileinfo = new FileInfo(logFileName);if (IsAutoDelete){if (fileinfo.Exists && fileinfo.Length >= 1024){fileinfo.Delete();}}using (FileStream fs = fileinfo.OpenWrite()){StreamWriter sw = new StreamWriter(fs);sw.BaseStream.Seek(0, SeekOrigin.End);sw.WriteLine("=====================================");sw.Write("添加日期为:" + DateTime.Now.ToString() + "\r\n");sw.Write("日志内容为:" + msg + "\r\n");sw.WriteLine("=====================================");sw.Flush();sw.Close();}}catch (Exception ex){ex.ToString();}}

例子很简单,方便理解,上面通过线程,每5秒执行一次操作,到这里,我们的服务以及服务实现的功能就已经写好了,下面怎么让客户端安装我们的服务呢?这里才是我写这篇文章的目的!先要增加一个安装程序类,切换到视图窗口,右击——>增加安装程序,便会增加一个程序安装类文件 ProjectInstaller.cs,如图:

这里serviceProcessInstaller1 和 serviceInstaller1 有几个重要属性要设置,serviceInstaller1 中的StartType要设置成Automatic,表示随机启动,ServiceName表示服务名称,Description 表示服务的描述, DisplayName 表示显示名称。serviceProcessInstaller1 中的Account要设置成LocalSystem,表示本地系统帐号

C# 安装布署 及Windows服务自动启动

设置serviceProcessInstaller1控件的Account属性为“LocalSystem”
设置serviceInstaller1控件的StartType属性为"Automatic"
在服务器上添加安装程序,在 private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) 事件中,添加以下代码:
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
string Cmdstring = "sc start myservice"; //CMD命令    myservice服务名称
p.StandardInput.WriteLine(Cmdstring);
p.StandardInput.WriteLine("exit");
即可在安装服务后立刻启动windows服务

Window服务的安装有两个方式:

一、命令安装

通过命令窗口,执行 InstallUtil.exe 服务路径 可安装Window服务,你是不是觉得我在扯,这么长的命令怎么看?怎么记住?可以想想如果客户端是一个不懂程序的人是不可能自己完成安装的,那么能不能制作一个简单有效,点点按钮可以安装的呢,答案是肯定的 ——> 安装程序制作
二、安装程序
安装程序制作 :解决方案(右击)——> 增加 ——> 新建项目 ——> 项目类型选择安装和部署 ——>  模板选择安装项目   如图 :
创建后,安装项目(右击) ——> 视图 ——> 文件系统 如图:

由于我们是安装服务,就不需要用户桌面和程序菜单了,直接应用程序文件夹(右击)——> 增加 ——> 项目输出 入图 :

上面有两点需要注意 ,一 项目选择中选择要安装的服务, 二 项目选择下面要选择主输出,选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作,这里我们增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) ——> 视图 ——> 自定义操作 如图

上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)——> 增加自定义操作,会弹出一个对话 如图:

选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:

这里 Arguments 里输入 /u  表示卸载命令相当于 InstallUtil.exe /u 服务路径  , 到这里 ,我们的安装程序就已经制作好了,生成安装程序项目,将会生成 setup.exe 和 setup.msi 安装文件,拷贝到客户端,点击setup.exe 就像安装QQ一样安装我们的服务,实际上比QQ好多了,QQ还有广告,我们可是纯绿色的!

在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案

--------------------------------------------------------------------------------------

1.创建 windows服务 项目   文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服务"

2.系统已经为我们建立了一个 Service1.cs 组件,测试时我们就用它了. 如果要新件的话,右键项目 -> 添加 -> 新建项 -> windows 服务。

3.在 Service1.cs 上 ,按 F7 (右键查看代码),打开代码页。加入我们测试用的代码。   注意:下面的几个方法中的 str 变量,为了我们一会儿调试时设置断点用的!

using System;using System.Diagnostics;using System.ServiceProcess;namespace WindowsService1{public partial class Service1 : ServiceBase{public Service1(){InitializeComponent();InitService();}/// <summary>/// 初始化服务参数/// </summary>private void InitService(){base.AutoLog = false;base.CanShutdown = true;base.CanStop = true;base.CanPauseAndContinue = true;base.ServiceName = "Service1";  //这个名字很重要,设置不一致会产生 1083 错误哦!}protected override void OnStart(string[] args){string str ="服务开启";}protected override void OnStop(){string str ="服务停止";}protected override void OnContinue(){string str ="服务继续运行";base.OnContinue();}protected override void OnPause(){string str ="服务暂停";base.OnPause();}}}

4.建立服务的“安装程序” 4.1 双击”Service1.cs“,打开 Service1.cs 的视图设计器 4.2 在视图设计器中任意位置右键,选择”添加安装程序“ 4.3 这时项目跟目下将出现一个 ProjectInstaller.cs 的组件     (如果是第一次添加”安装程序“的话) 4.4 双击 ProjectInstaller.cs 打开 ProjectInstaller  的视图设计器 4.5 找到 serviceInstaller1 组件,选中后按 F4 键,设置组件属性。   Description=“测试服务1”;   DisplayName=“Service1”;   ServiceName=“Service1”;//这个值必须和 WindowsService1.InitService() 方法下设置的 base.ServiceName 属性一至。   StartType 为服务运行类型,根据你的需要设置即可。(Manual:手动启动,AutoMatic 为自动启动) 4.6 找到 serviceProcessInstaller1 组件,选中后按 F4 键,设置组件属性。   Account=“LocalSystem”; //设置为其他的属性在开启服务时,会提示输入用户名和密码 4.7 这样就完成了一个服务的所有准备,下面就是安装和测试工作。

5.生成组件 右键项目,选择“生成”。

6.安装组件 6.1 使用 InstallUtil.exe 工具注册组件服务,文件位置在不同版本的 framework 中。我用的是 4.0 所以在一下位置 C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe 6.2 打开生成目录,如果生成成功会有一个 WindowsService1.exe 文件 6.3 在生成目录根目录下新加两个 bat(批处理文件),用于安装和卸载服务   新建一个文本文件,打开文件加入以下两行命令   C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe WindowsService1.exe   pause   保存后关闭文本文件,之后将其重命名为“安装服务.bat”文件,注意要修改后缀名为 .bat!

再新建一个文本文件,打开文件加入以下两行命令   C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u WindowsService1.exe   pause   保存后关闭文本文件,之后将其重命名为“卸载服务.bat”文件,注意要修改后缀名为 .bat! 6.4 “安装服务.bat”文件,安装windows 服务

7.安装成功后需要手动开启服务,因为我们刚设置 serviceInstaller1.StartType 为 Manual 打开windows 服务管理器,找到名为 Service1 的服务,右键属性。点击【启动】按钮

8.windows 调试 8.1 回到开发环境,选择调试->附加到进程,勾选”显示所有用户进程“ 8.2 找到 WindowsService1.exe 进程(如果没有点击下刷新按钮),选中后点击“附加到进程”按钮。 8.3 选中 Service1.cs 文件,后按 F7 打开代码视图 8.4 在所有 str 变量上添加调试断点 8.5 回到windows服务管理器,找 Service1 服务并选中它,在左侧有一个“暂停”按钮。点击一下   这时,OnPause 方法下的断点命中!OK 达到了调试的目的了

9.如果想一次安装多个服务,需要按照 2~5 的步骤多添加几个服务就好了! -------------------------------------------------------------------------------------- 问题及解决方案 注册成功后,启动 Windows服务 时遇到错误:1083 的解决办法 1.查看 Main() 方法中是否启动了指定的服务 ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] {   new Service1(),   new Service2() //如果建立多个服务需要添加这段代码 }; ServiceBase.Run(ServicesToRun);

2.确保 ProjectInstaller.cs 视图设计器中的 serviceInstaller1 组件的 ServiceName 属性   与 Service1.cs 组件的 ServiceName 属性一致

转载于:https://www.cnblogs.com/tjy9999/p/3660155.html

.net Windows服务程序和安装程序制作图解相关推荐

  1. vb6.0安装程序制作图解教程

    如何制作vb安装程序,是在学习Vb6.0过程中比较常见的一个入门问题. 在此笔者介绍一个最简单的安装方法,就是用VB自带的打包程序进行打包,虽然比较普通,不过内部却有不少窍门,相信这一点知道的人可能不 ...

  2. NSIS(Nullsoft Scriptable Install System)开源安装程序制作软件使用详细步骤(Windows系统下)

    NSIS(Nullsoft Scriptable Install System)开源安装程序制作软件使用详细步骤(Windows系统下)安装包制作 1.软件详情 软件版本 版本说明 翻译跟进 2.教程 ...

  3. windows 服务程序和桌面程序集成(一)

    本系列文章介绍如何将windows服务程序和桌面程序集成在一起,也就是说一个EXE程序,既可以作为服务程序运行,也可以作为桌面程序运行的双模程序. 在十几年前,曾经给客户开发一套C/S架构的出单程序, ...

  4. VC++ 安装程序制作

    VC++ 安装程序制作 2009-10-25 10:40 当用VC++完成应用程序的编制后,如果不为它制作一个安装程序,似乎感到缺少一点什么, 你也许急于到市面找制作安装程序的工具,如"Cr ...

  5. Java安装程序制作工具

    Java安装程序制作工具 IzPack 是一个 Java 安装程序制作工具,能够制作一些简单的安装程序.制作出来的安装程序能在 Unix-like, MacOS X, Windows 等系统平台上运行 ...

  6. 一键安装,双击运行——Java安装程序制作

    如果您喜欢这些文章,欢迎点击此处订阅本Blog <script type="text/javascript"></script> <script sr ...

  7. 关于安装程序制作的简明教程(一)

    关于安装程序制作的简明教程(一) Vitamin C[抗坏血酸].2002.3.11.ZJ.GD.CHI. 前段时间我完成了几个软件的汉化,想把它们打包起来,可是苦于我是一个很菜的鸟,很笨的瓜,只好上 ...

  8. Windows 下OpenSSL 安装详解 +图解

    Windows 下OpenSSL 安装详解 +图解 转载于:https://www.cnblogs.com/zhujiabin/p/5088646.html

  9. C# 安装程序制作,如何添加第三方DLL以及自定义的文件夹(如uploadFiles 文件夹)

    项目基本的安装程序制作,可参考: http://blog.csdn.net/kezhen/article/details/17732615 http://blog.csdn.net/kezhen/ar ...

最新文章

  1. java添加窗体_添加的窗体
  2. B - 一只小蜜蜂...
  3. Leetcode771.Jewels and Stones宝石与石头
  4. 深度剖析数据中台提供的数据服务
  5. 3371 【模板】单源最短路径(Dijsktra)
  6. UCF101数据集处理
  7. web 打印实用控件 lodop
  8. alibaba人一起写过的技术丛书
  9. 优秀不够,你是否无可替代
  10. Docker容器离线安装字体(宋体)
  11. java 虚拟机 Java内存结构 JVM垃圾回收机制算法
  12. 【基础教程】Python整数类型(int)详解
  13. 浅谈电子配线架智能布线管理系统(二)
  14. 2021年最适合上班族的25个副业,男女通用!
  15. 安装最新的文泉驿字体[z]
  16. Django2.0官方文档--概览
  17. 信心恒心耐心爱心包容心平常心
  18. 西门子plc程序备份项目服务器,如何备份程序
  19. EndNote两台电脑同步library
  20. JAVE获取视频文件属性信息(比较全)

热门文章

  1. java怎么运行class文件,面试必会
  2. python【蓝桥杯vip练习题库】ALGO-1区间k大数查询
  3. MySQL-数据库和表的基本操作
  4. ftp服务器文件备份,数据备份是十分重要的,下面是通过ftp将本机数据备份到远程服务器的一个例子...
  5. win10定时关机c语言,Win10系统怎么定时关机?Windows10设置定时关机的两种方法
  6. vue hot true 不起作用_从源码解读 Vuex 注入 Vue 生命周期的过程
  7. 骂骂咧咧的 fastreport 数据隔行换色
  8. Windos 10 下,应用版ubuntu系统, 访问windos文件系统
  9. 如何提升网站在搜索引擎中的排名?
  10. 浅析SEO优化分类信息网站优化的三大技巧