.net下将exe改造为既能双击独立运行又能注册为windows服务

最近项目中需要将一些业务的处理程序改造为windows服务,但是考虑到实际需求,也需要能够直接双击运行这些处理程序。首先第一步想到的就是原来的项目不变,只需要在加一个windows服务的项目就行。但是实际使用中还是比较有风险,可能别人无意中关闭了你的运行程序,或者服务器维护重启之后需要启动大量的exe程序。所以需要将这些处理程序改造成既能以exe的形式双击运行,又能将该程序注册为windows服务开机自动运行。

首先我们的大量的处理程序都是以控制台程序存在,所以这里主要介绍控制台程序改造。在改造的过程中看了很多资料,最终发现了这样的一些方法,我在这里将其总结起来。

在.net的程序中,所有应用的入口是 Program 类的 Main(srting[] args) 函数,它的参数是用来接收启动参数的(详见:《.net控制台程序Program args参数解析》),在这里我对程序进行改造。

新建一个控制台程序,在该项目中添加(右键 > 添加 > 新建项)一个windows服务 MyWidnwosService.cs

image

在MyWidnwosService中的OnStart()和OnStop()中写入程序逻辑。

然后在Main函数中写入我们的启动逻辑:

 1 static void Main(string[] args)
 2   {
 3       // 如果有启动参数,并且第一个启动参数是sr,以服务形式运行
 4       if (args.Length > 0 && args[0].Equals("sr"))
 5       {
 6           ServiceBase[] ServicesToRun;
 7           ServicesToRun = new ServiceBase[] 
 8           { 
 9             new MyWidnwosService()
10           };
11           ServiceBase.Run(ServicesToRun);
12       }
13       else
14       {
15           // 以控制台程序运行,调用程序逻辑
16       }
17   }

这样我们就轻易实现了控制台程序和windows服务结合的应用程序了。接下来我们需要的就是将该程序注册为windows服务,这里我们需要用到一个第三方的工具:srvanyui.exe(该软件作者 王晔,地址:http://wangye.org),该软件原理网上非常多,大家自行百度“srvany.exe”。

首先打开srvanyui.exe程序

image

这里我们会看到很多本机已经存在的服务了,我们点击左上角 image 图标添加我们的服务,在这里选择自建服务,服务名称、内部标识、服务描述等自己设定,然后选择好程序路径(编译好的exe程序),输入软件的启动参数,上面我们设置的是sr,然后设置号启动方式点击确定就安装好我们的服务了。

image

srvanyui.zip下载地址:http://pan.baidu.com/s/1pLJ2Rz1

如果无法下载,请发邮件:jw@jiewus.com

posted @ 2016-04-14 14:18  jiewus  阅读(580)  评论(0编辑  收藏  举报