winsw——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
winsw
⼀、WinSW介绍
官⽅介绍如下:
WinSW is an executable binary, which can be used to wrap and manage a custom process as a Windows service.
现实⽣活中,我们使⽤windows系统的电脑的时候,可能会遇到这么⼀种情况:想把⼀些应⽤程序添加为开机启动项。
对于有图形界⾯的应⽤程序,⼀般不存在问题。
但是如果想运⾏命令⾏应⽤程序,就不是那么⽅便了。
⼀种笨办法就是写个bat,放到启动⽂件夹⾥,就可以开机启动了。
开机之后,你就会发现,这样会⼀直显⽰着⼀个CMD窗⼝,⽽且这个窗⼝不能关,关了程序就停了。
其实Windows系统⾃带后台程序管理的功能,也就是我们经常⽤到的服务。
但是Windows的服务只有程序的开发者在写程序的时候引⽤到这个功能,我们才能利⽤服务来控制程序的启动和关闭。
对于⼀般的命令⾏程序来说,没办法利⽤服务。
今天要介绍的WinSW,它就是⼀个可以将Windows上的任何⼀个程序注册为服务的⼯具。
同样也可以进⾏卸载该服务。
⼆、WinSW使⽤
1、⼯具下载
下载完之后最好把⽂件改成⼀个⽐较短⼩的名字,例如:WinSW.exe ⽅便后⾯输⼊命令时使⽤。
2、修改配置⽂件
我们需要编写⼀个和程序同名的XML⽂件作为WinSW的配置⽂件。
⼤体的格式如下:
这⾥只是简单介绍使⽤WinSW的流程,配置项实际也不⽌那么⼏个,在第三部分有关于配置⽂件的详细解释。
3、注册服务
配置⽂件编写完之后,将配置⽂件与WinSW.exe放在同⼀⽬录中。
注意对应WinSW.exe的配置⽂件名称应该是WinSW.xml。
此
时,WinSW.exe、WinSW.xml以及你的应⽤程序应该都是在同⼀⽬录中。
然后⽤管理员权限打开⼀个命令提⽰符窗⼝,cd进⼊到应⽤程序所在⽬录,可以通过输⼊下⾯的命令来进⾏控制应⽤程序对应的服务:
winsw install 安装服务
winsw uninstall 卸载服务
winsw start 开启服务
winsw stop 停⽌服务
winsw restart 重新启动服务
winsw status 检查服务的当前状态
安装服务命令执⾏后,如果返回值为0,就表⽰服务已经安装成功。
此时在windows服务的窗⼝,就能看到你刚才安装的服务了。
三、WinSW配置说明(翻译xmlConfigFile.md)
1、配置⽂件的⽂件结构
配置⽂件是⼀个XML格式⽂件,其根元素必须是“service”节点。
2、配置⽂件中的环境变量表达式
XML配置⽂件中,可以包含形如“%Name%”的环境变量表达式。
如果发现这种情况,将会⾃动被变量的实际值替换掉。
如果引⽤未定义的环境变量,则不会进⾏替换。
此外,服务包装器本⾝定义了⼀个名为“BASE”的环境变量,它指向⼀个包含重命名为“winsw.exe”的⽂件的⽬录。
这在引⽤同⼀⽬录中的其他⽂件的时候是很有⽤的。
由于这本⾝就是⼀个环境变量,所以这个值也可以从服务包装器启动的⼦进程中访问。
3、配置项说明
(1)id
指定在Windows系统内部使⽤的识别服务的ID。
在系统中安装的所有服务中,这必须是唯⼀的,它应该完全由字母数字字符组成。
(2)name
服务的简短名称,它可以包含空格和其他字符。
尽量简短,就像“id”⼀样,在系统的所有服务名称中,也要保持唯⼀。
(3)description
该服务可读描述。
当选中该服务时,它将显⽰在Windows服务管理器中。
(4)executable
该元素指定要启动的可执⾏⽂件。
它可以是绝对路径,也可以指定可执⾏⽂件的名称,然后从环境变量“PATH”中搜索(需要注意的是,服务经常在不同的⽤户账户中运⾏,因此它可能需要有不同于你设置在环境变量Path中的路径)。
(5)startmode
(6)delayedAutoStart
请注意,延时启动模式在早于Windows 7和Windows Server 2008的操作系统中可能失效。
在这种情况下,Windows服务安装可能会失败。
(7)depend
指定该服务所依赖的其他服务的id。
当服务“X”依赖于服务“Y”时,“X”只能在“Y”运⾏后运⾏。
可以使⽤多个元素来指定多个依赖项。
(8)logging
关于服务进程的⽇志以及错误信息,有单独的⼀个配置说明⽂档【WinSW Logging and Error Reporting】,咱们下次再详细说。
(9)argument
该元素指定要传递给可执⾏⽂件的参数。
如果有必要,Winsw会给每⼀个参数外加引号(“”),所以为了避免双重引号,尽量不要在参数中使⽤引号。
为了向后兼容,可以使⽤“arguments”来指定单个元素中的整个命令⾏。
(10)stopargument/stopexecutable
请求停⽌服务时,winsw通过调⽤终⽌进程的API函数来⽴即终结服务。
然⽽,如果存在“stopargument”元素,winsw将通过使
⽤”stopargument“作为参数,来启动“executable“元素(或者是”stopexecutable“元素)中配置的进程,来代替调⽤终⽌进程的API函数。
期望通过这种⽅式来优雅的关闭服务进程。
然后,Winsw将等待两个进程⾃⾏退出,然后向Windows报告该服务已经终⽌。
当你使⽤“stopargument”元素时,你必须使⽤“startargument”元素代替“argument”元素。
参见下⾯的完整⽰例:
catalina.sh
jpda
run
catalina.sh
stop
注意,元素的名称是“startargument”,⽽不是“startarguments”。
因此,要指定多个参数,你必须指定多个元素。
(11)stoptimeout
当服务被要求停⽌时,winsw⾸先尝试调⽤GenerateConsoleCtrlEvent ⽅法(类似于Ctrl+C),然后等待长达15秒的时间,让进程⾃⾏退出。
如果这样做了,进程关闭还是失败了(或者如果进程没有控制台),
然后winsw会调⽤终⽌进程的API函数来⽴即终⽌服务。
这个可选元素允许您改变这个“15秒”的值,这样您就可以控制winsw等待服务进程⾃⾏关闭的时间。
如何指定时间期限,可参考下⾯的“onfailure”元素的设置:
10sec
(12)env
如果有必要,可以使⽤这个可多次指定的可选元素,为⼦进程设置环境变量。
其语法是:
(13)interactive
如果指定了这个可选的元素,那么该服务将被允许与桌⾯交互,⽐如显⽰⼀个新的窗⼝和对话框。
如果你的程序需要GUI,那么设置如下:
请注意,⾃从引⼊UAC(Windows Vista及之后的版本)以来,服务不再被允许与桌⾯交互。
在这些操作系统中,所有这⼀切都是为了允许⽤户切换到⼀个单独的窗⼝来与服务交互。
(14)beeponshutdown
这个可选元素是为了在服务关闭时发出简单的⾳调。
这个特性应该只⽤于调试,因为⼀些操作系统和硬件不⽀持这种功能。
(15)download
这个可选元素可以多次指定,让服务包装器从URL检索资源,并将其作为⽂件放置在本地。
这个操作是在服务启动时运⾏的,
在“executable”指定的应⽤程序启动之前。
对于需要⾝份验证的服务器,必须根据认证的类型指定⼀些参数。
只有基本⾝份验证需要额外的⼦参数。
⽀持的⾝份验证类型是:
none:默认类型,不能指定
sspi:微软认证,包括Kerberos、NTLM等。
basic:基本⾝份认证,⼦参数包括:
1)user=“UserName”
2)password=“Password”
3)unsecureAuth=“true”:default=“false”
当传输协议是未加密的HTTP数据传输时,参数“unsecureAuth”才⽣效。
这是⼀个安全漏洞,因为凭证是⽤明⽂发送的!对于SSPI认证,这是不相关的,因为⾝份验证令牌是加密的。
默认情况下,如果操作失败(例如,⽆效的下载地址),“download”命令也不会在服务启动时失败。
为了在这种情况下强制下载失败,可以指定“failOnError”布尔属性。
⽰例如下:
这是开发⾃动更新服务的另⼀个有⽤的构建块。
(16)onfailure
这个可选的可重复元素控制了winsw启动的进程失败后的⾏为(例如,执⾏带有⾮零退出码的退出操作)。
例如,上⾯的配置使服务在第⼀次故障后10秒内重新启动,在第⼆次失败后20秒重新启动,如果服务再次失败,Windows将重新启动。
每个元素都包含⼀个强制的“action”属性,它控制着Windows SCM将要做什么,以及可选的“延迟”属性,它控制着延迟,直到采取⾏动为⽌。
“action”属性的值包含以下⼏种:
restart:重启服务
reboot:重启系统
none:什么也不做,就让服务那么停着
延迟属性的可能后缀是sec/secs/min/mins/hours/day/days。
如果未设置,延迟属性默认为0。
如果服务持续失败的次数超出了配置的“onfailure”的数量,那么最后的操作将会被重复。
因此,如果只是想要⾃动重启服务,只需指定⼀
个“onfailure”元素即可:
(17)resetfailure
这个可选元素控制了Windows SCM重新设置故障计数的时间。
例如,如果指定``,并且您的服务持续运⾏超过⼀个⼩时,那么故障计数将重置为零。
这会影响故障操作的⾏为(见上⾯的“onfailure”)。
换句话说,这是你认为服务已经成功运⾏的持续时间。
默认值为1天。
(18)Service account
有可能需要指定服务运⾏所需要的的useraccount(和密码)。
要做到这⼀点,可以按照下⾯的⽅法指定⼀个“serviceaccount”元素:
YOURDOMAIN
useraccount
Pa55w0rd
true
“”是可选的。
如果设置为“true”,则会⾃动给上⾯列出的⽤户设置“Allow Log On As A Service”的权限。
可以使⽤(组)管理服务帐户附加'$'到帐户名称,并删除'password'元素:
YOURDOMAIN
gmsa_account$
true
(19)Working directory
有些服务需要使⽤指定的⼯作⽬录运⾏。
要做到这⼀点,要指定⼀个像这样的“workingdirectory”元素:
C:\application
(20)priority
可选地指定服务流程的调度优先级(类似于Unix)。
可能的值有“idle”、“belownormal”、“normal”、“abovenormal”、“high”、“realtime”(⼤⼩写不敏感)。
idle
指定⾼于正常值的优先级会产⽣意想不到的后果。
请参阅MSDN⽂章ProcessPriorityClass Enumeration来了解详细信息。
这个特性主要是为了在较低的优先级上启动⼀个进程,以避免⼲扰计算机的交互使⽤。
(21)stopparentprocessfirst
可选地指定服务关闭的顺序。
如果“true”,⽗进程⾸先关闭。
当主进程是⼀个控制台时,这是很有⽤的,它可以响应Ctrl+C命令,并优雅地关闭⼦进程。
true。