隐藏

VS2010如何一步步开发添加Windows服务(Windows service)及服务安装启动

发布:2019/12/1 16:40:59作者:管理员 来源:本站 浏览次数:1327

最近在做一个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