用winsw让任何Windows程序都能运行为服务
用winsw让任何Windows程序都能运行为服务
winsw介绍
有时候我们需要在Windows下开机运行某些程序,这对于有图形界面的程序来说一般不是什么事,在选项中选中开机启动,然后它们就可以自动运行了。但是如果我们想运行一些命令行程序的话就没这么方便了。
原来我的做法是写一个bat脚本,然后将它的快捷方式复制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
,这样就可以开机自启了。不过这种方式有一个非常大的缺点,就是开机之后会显示一个命令行窗口!而且这个窗口还不能关,一关程序就停了。
其实Windows自带了一个后台程序管理的功能,就是我们经常用到的服务。但是Windows的服务只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。对于一般的命令行程序来说,没办法利用服务。所以今天我们就来使用一下标题的这个winsw。它可以将Windows上的任何一个程序注册为服务,如果不需要,也可以方便的卸载服务。
使用winsw
下载
首先要下载winsw。它是一个单个的可执行文件,我们到Github release这里就可以下载winsw了。一般来说当然是下载最新的。winsw可以运行在.NET2和.NET4两个版本上,当然如果使用Win10等比较新的系统,最好下载更新版本的.NET。
下载完之后最好把文件改成一个比较短小的名字,例如winsw.exe
这样的,方便后面输入命令。
编写配置文件
我们需要编写一个和程序同名的XML文件作为winsw的配置文件。文件大体上长这样,这是官网的例子。
<service>
<id>jenkins</id>
<name>Jenkins</name>
<description>This service runs Jenkins continuous integration system.</description>
<env name="JENKINS_HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
<logmode>rotate</logmode>
</service>
看到XML的标签名,我想大家也能猜到这些参数是干嘛的,所以我就不介绍了。下面是我的一个配置文件例子。
<service>
<id>kcp</id>
<name>kcp</name>
<description>这个服务用来将ss使用kcp协议加速</description>
<executable>client_windows_amd64</executable>
<arguments>-c kcp-config.json</arguments>
<logmode>reset</logmode>
</service>
注册服务
编写好配置文件之后,记得把配置文件和可执行文件放在一起,这样winsw才能正确识别配置文件。然后我们打开一个管理员权限的命令提示符或Powershell窗口,然后输入下面的命令,如果返回值为0,说明已将程序注册为服务。
winsw install
然后打开Windows的服务,我们可以看到这下已经出现了注册的服务,我们可以像一般服务那样开启、关闭它。
如果不再需要这个服务,使用winsw uninstall
即可卸载服务。当然还有诸如start
、stop
这样的命令启动和关闭服务。更重要的是,没有那个既不美观又烦人的命令提示符窗口。
原文博客的链接地址:https://cnblogs.com/qzf/
用winsw让任何Windows程序都能运行为服务的更多相关文章
- Windows程序内部运行机制 转自http://www.cnblogs.com/zhili/p/WinMain.html
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- 深入浅出话VC++(1)——Windows程序内部运行机制
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- Windows编程 Windows程序的生与死(上)
引子 “Windows 程序分为‘程序代码’和‘UI(User Interface)资源’两大部份,两部份最后以RC编译器(资源编译器)整合为一个完整的EXE 文件.所谓UI 资源是指功能菜单.对话框 ...
- 初识Windows程序
首先,我们创建第一个Windows程序,一共分为4个步骤: 1.打开Visual Studio开发工具 2.选择"文件"→"新建"→"项目" ...
- 窗体==>>初始Windows程序
初识Windows程序 01.创建Windows程序(VS) 01.打开Visual Studio开发工具 02.选择"文件"→"新建"→"项目&qu ...
- windows程序防狼术入门
当初由于一些原因以及兴趣,学习了一段时间软件逆向,对于软件加密解密有了点粗略的了解.而后看到某些同学辛辛苦苦的搞出个软件,自己费心费力去加密,但搞出来后往往能被秒破,实不忍心.今天大概总结下一些基本的 ...
- Windows程序----初识Windows程序
先来看一些励志名言来激励一下自己吧! 励志名言:每一发奋发奋的背后,必有加倍的赏赐 1.有无目标是成功者与平庸者的根本差别. 2.成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成. 3.当 ...
- 关于windows程序的学习及思考系列之一
1.窗口类的注册 a.windows程序中最简单的就是创建一个简单的窗口,而窗口程序的创建是基于窗口类的,窗口类决定了处理窗口消息的过程函数. b.一个窗口类可以用于创建多个窗口,也就是说窗口是窗口类 ...
- windows程序移植linux
1,路径名统一用正斜杠“/”.(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fileencoding ...
随机推荐
- springMVC之Interceptor拦截器
转自:https://blog.csdn.net/qq_25673113/article/details/79153547 Interceptor拦截器用于拦截Controller层接口,表现形式有点 ...
- MySQL数据类型的长度
MySQL有几种数据类型可以限制类型的"长度",有CHAR(Length).VARCHAR(Length).TINYINT(Length). SMALLINT(Length).ME ...
- background-image,background-repeat, background-position 实现点赞图片(一个图片的多次使用)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MVC中数据传递 ViewBag的使用
ViewBag MVC3中 ViewBag.ViewData和TempData的使用和差别 在MVC3開始.视图数据能够通过ViewBag属性訪问.在MVC2中则是使用ViewData.MVC3中保留 ...
- js实现UTC时间转为北京时间,时间戳转为时间
用了阿里云的接口,发现其穿的日期是UTC格式的.需要转换. var utc_datetime = "2017-03-31T08:02:06Z"; function utc2beij ...
- 使用plsql进行查询的时候出现错误:动态执行表不可访问,本会话的自动统计被终止
- 将Ctrl+Alt+Delete键进行屏蔽,防止误操作重启服务器
[root@bgw-t ~]# vi /etc/init/control-alt-delete.conf #exec /sbin/shutdown -r now "Control-Alt- ...
- one by one 项目 part 3
mysql error:Table 'performance_schema.session_variables' doesn't exist 打开cmd 输入:mysql_upgrade -u roo ...
- 群晖Nas中搭建Intellij Idea的LicenseServer服务
下载IntelliJIDEALicenseServer(直接找度娘) 准备 shellX 或其他 ssh工具,个人比较喜欢 mobaxterm. 通过 ssh工具连接到群晖中,用户名和密码就是登陆群晖 ...
- Linux就业技术指导(五):Linux运维核心管理命令详解
一,Linux核心进程管理命令 1.1 ps:查看进程 1.1.1 命令解释 功能说明 ps命令用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片.如果想要动态地显示进程,就需要使 ...