// 停止服务要执行的代码
30 protected override void OnStop()
31 {
32 _mainServ.Stop(); // 停止服务
33 _mainServ = null; // 释放服务资源
34 }
35 }
36 }
7、编译生成Windows 服务程序。
8、上面的Windows 服务项目编译生成的都是 安装包 最终要安装/卸载的对象;接下来就添加一个安装项目用来安装上面的服务,如图:
9、添加工程后,在默认的 视图界面(可通过右击安装项目->视图->文件系统; 打开此视图界面) 右键点击”应用程序文件夹“,选择”添加“->”项目输出“;(这部分也可以参照VS如何添加一个安装项目之类的文章)
在弹出的窗口中选择“主输出”(记得选中项目),点击“确定”。
注意:上面的选择里还有个配置可选,可选项有如图:
如果不选则默认是 (活动),它和需要打包的项目的状态是一致的,如果待打包的项目当前是Debug的,则(活动)代表 Debug Any CPU;
如果你的待打包项目的Release和Debug是不同的,则最好手动选中Debug还是Release(比如待打包项目的Debug是测试用的窗体程序,而Release则是真正要发布的Windows服务程序,这时候最好手动选择)
10、上面的步骤定义了最后在应用程序文件夹中包含的内容。下面来定义其他方面的内容(设置安装程序执行的同时安装服务到系统服务列表中,很重要)。
在项目上点右键,选择 视图->自定义操作:
出来如下的界面,然后在”自定义操作“上点右键,选择”添加自定义操作“:
在弹出的窗口中双击”应用程序文件夹“:
然后选择”主输出来自HelloWorldService(活动)“(这部分要根据自己的程序进行相应的更改),点击”确定“:
选择之后会发现所有的操作下边都添加了刚才选定的项,如下图。做到这一步,就能使安装程序卸载时不仅把程序卸载下来,也能把服务卸载下来(安装的同时真正意义上的安装服务)。
11、接下来在安装项目上点右键,选择”生成“,就能使安装程序正常发布了,成功后会生成两个文件(这里貌似只需要 .msi的文件就可以安装了setup.exe不知道有什么用)。
// 这句话可不看:安装成功后根据你的Windows 服务项目中服务安装程序的配置决定是否需要手动启动服务。
重要提示:如果想要windows服务安装后立刻主动启动可以在Windows Service的ProjectInstaller.cs(添加安装程序)中增加下面的代码:
///// <summary>
///// 修改Visual Studio 中 Windows Service的ProjectInstaller.cs中的代码
///// 重写安装完成后函数(只功能都已经安装完成,而不是安装窗体已经关闭)
///// 实现安装完成后自动启动已安装的程序或启动服务(可能需要管理员权限才有用),看下怎样才能让安装程序必须有管理员权限。(或许可以通过C#本身的代码实现开启服务,而不一定要管理员权限)
///// </summary>
//protected override void OnAfterInstall(IDictionary savedState)
//{
// base.OnAfterInstall(savedState);
// MessageBox.Show("是安装完成后才出现的吗?"); // 这个可以执行一个 .bat(net start XXX)来开启Windows服务,不过需要管理员权限;
//}
|