需求
有时候,我们有一个控制台应用程序(exe),双击启动后就能执行某项特定的功能,比如一些定时处理程序,后台监测程序等,但黑色的窗口关闭后应用程序就结束了,比如小编这里使用asp.net core 编写的一个网站,publish后输出一个exe控制台应用程序WebApplication.exe:
![c28b4cbc567c3b48ca4b87f72a327fd6.png](https://img-blog.csdnimg.cn/img_convert/c28b4cbc567c3b48ca4b87f72a327fd6.png)
这时打开浏览器,输入http://localhost:5000 就能访问到网站了:
![f17eb5e3393379725d7d8cbe84236610.png](https://img-blog.csdnimg.cn/img_convert/f17eb5e3393379725d7d8cbe84236610.png)
但当我们关闭黑窗口时应用程序结束。
在Windows上应用程序可以无窗口以服务方式运行,以服务方式运行有以下优点:
- 可以设定随操作系统自启动
- 可以静默运行
一般地,大家可能想到自己编写一个windows服务程序,安装服务不就可以了吗,但假设这个应用程序不是自己编写的呢?亦或者在开发阶段为了方便调试想以命令行方式运行,交付给客户以windows服务方式运行,怎么办呢?
解决
WinSW—一款开源的很轻量,支持配置的可将自定义进程托管为windows服务的应用程序,github地址为:https://github.com/kohsuke/winsw 具体大家可以进主页看看Readme.
- 首先在官方下载该程序:
![ffb8e86d5a9c76e5d5c8516aa31c0f32.png](https://img-blog.csdnimg.cn/img_convert/ffb8e86d5a9c76e5d5c8516aa31c0f32.png)
下载界面
- 重命名WinSW.NET4.exe 和 sample-minimal.xml,名称保持一致,如 MyWebApp.exe 和MyWebApp.xml, 并将其放在控制台程序工作目录:
![da976c5b938d99fd0fd71190dbda8dc7.png](https://img-blog.csdnimg.cn/img_convert/da976c5b938d99fd0fd71190dbda8dc7.png)
- 编辑MyWebApp.xml文件:
![f05db84d7281fcc007d1409b0e3cbabd.png](https://img-blog.csdnimg.cn/img_convert/f05db84d7281fcc007d1409b0e3cbabd.png)
- 安装服务
以管理员方式启动cmd,cd到exe所在目录,执行 MyWebApp.exe install:
![4520ecbd1d1f90c339ef29af49ac33bf.png](https://img-blog.csdnimg.cn/img_convert/4520ecbd1d1f90c339ef29af49ac33bf.png)
- 启动服务
![89d55138d8773f66c6bf27a38a81de41.png](https://img-blog.csdnimg.cn/img_convert/89d55138d8773f66c6bf27a38a81de41.png)
- 测试
![f17eb5e3393379725d7d8cbe84236610.png](https://img-blog.csdnimg.cn/img_convert/f17eb5e3393379725d7d8cbe84236610.png)
拓展
上面以一个web应用程序为示例演示过程,那么其实借助该程序我们可以托管任何控制台程序成为一个windows服务,而且WinSW本身支持失败重启,权限配置等非常齐全的特性,如果深入使用的话可以参考 sample-allOptions.xml