winsw——精选推荐

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档