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