Window服务的安装有两个方式:
一、命令安装
由于我们是安装服务,就不需要用户桌面和程序菜单了,直接应用程序文件夹(右击)——> 增加 ——> 项目输出 入图 :
上面有两点需要注意 ,一 项目选择中选择要安装的服务, 二 项目选择下面要选择主输出,选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作,这里我们增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) ——> 视图 ——> 自定义操作 如图
上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)——> 增加自定义操作,会弹出一个对话 如图:
选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:
这里 Arguments 里输入 /u 表示卸载命令相当于 InstallUtil.exe /u 服务路径 , 到这里 ,我们的安装程序就已经制作好了,生成安装程序项目,将会生成 setup.exe 和 setup.msi 安装文件,拷贝到客户端,点击setup.exe 就像安装QQ一样安装我们的服务,实际上比QQ好多了,QQ还有广告,我们可是纯绿色的!
--------------------------------------------------------------------------------------
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 属性一致
.net Windows服务程序和安装程序制作图解,布布扣,bubuko.com
原文:http://www.cnblogs.com/tjy9999/p/3660155.html