最近在做一个Socket的服务端程序,调试成功后,就打算将其做成Windows服务,第一次操作,于是先到网上搜索一些资料,最后完成服务,特记录如下。
第一步,需要创建一个Windows应用程序,(我创建的是控制台程序,如果WinForm也一样)
接下来在项目中添加一个Windows服务类
然后双击“MainService.cs”,在上面点右键“打开代码”
这里面写服务的具体实现,以下是我写的示例代码
partial class MainService : ServiceBase { private CETCBackServer cetcBackServer; private IContainer components = null; private ILog log = LogManager.GetLogger("CETCService"); public CETCService() { this.InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing && (this.components != null)) { this.components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { this.components = new Container(); base.ServiceName = "Service1"; } protected override void OnStart(string[] args) { this.cetcBackServer = new CETCBackServer(); } protected override void OnStop() { this.cetcBackServer.Dispose(); this.log.Info("停止服务"); } }
第二步 右键刚才完成的服务类,点击视图设计器,添加安装程序。
项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件
serviceProcessInstaller1
serviceInstaller1
可以看见项目中多了如下文件和组件,serviceProcessInstaller1、serviceInstaller1是自动生成的
第三步
设置组件serviceInstaller1的主要属性,ServiceName: 服务系统标识,在cmd命令中执行sr start/stop/query等等命令时候使用,用来唯一标识一个Window服务,这个千万要注意,别弄混了!
设置ServiceName的值, 该值表示在系统服务中的名称
设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动
设置Description,添加服务描述
设置组件serviceProcessInstaller1的主要属性,Accout:账户类型,LocalSystem本地系统服务;
然后重新生成项目,生成成功!到这里,我们只是完成了第一部分,接下来是对服务的安装、卸载和调试了,这里我折腾了不少时间。
---------------------------------------------------------------------分割线----------------------------------------------------------------------------
第一步 安装服务 一开始,程序生成成功,我直接启动EXE,提示我“无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它”!
然后
1、打开所有程序中的VS,以管理员身份打开VS命令提示符!
2、这一步切记!对照项目的运行环境,要确定FrameWork的版本,我这里用的是2.0版本。于是将C:\Windows\Microsoft.NET\Framework\v2.0.50727下的InstallUtil.exe复制到要安装的目录下,我放在程序的bin\Debug目录下。
3、cd 到Debug目录下,执行命令
InstallUtil.exe Server.exe
如上图所示,表示服务安装完成!
第二步 启动服务 net start Servive1(服务名称) 跟.exe的名称可能一样,也可能不一样。如果不清楚,就到已安装的服务里面找到你的服务,右键属性里面看服务名称,也可以右键计算机,在管理-》服务,开启服务。
第三步 停止服务 net stop ServiceName
第四步 卸载服务 InstallUtil.exe /u Path/Server.exe
至于调试的话,Windows服务无法直接进行调试,只能先安装启动服务,然后将该服务附加到进程,就可以调试了。安装好服务后,就可以在win7服务管理里面,管理刚刚启动的服务了。
参考网址1、服务 在初始化安装时发生异常:System.IO.FileNotFoundException: 未能加载文件或****** - 覆雨翻云 - 博客园 http://www.cnblogs.com/railgunman/p/4590347.html
2、VS 2010一步步开发windows服务(windows service) - 欢醉 - 博客园 http://www.cnblogs.com/zhangs1986/p/3502026.html