圆圆
首先让我们下载Se rvicePiIot命令行程序(下载地址:https:∥www.coretechnologies.com/products/ServicePilot/ServicePilot.exe)。下载之后,通过在命令提示符窗口中执行“Service Pilot-help”命令,可以获取关于该命令行程序的详细参数说明文本(图1)。英文的说明信息大家不一定能看明白,因此下面就一些重要的参数作必要的解释。
ServicePiIot命令行的基本格式为:
ServicePilot.exe<-start|-Stop|-restart>[-wait][-noforce][-computer][-args][-verbose]
上述命令中的选项“-start”表示启动服务,“-stop”表示停止服务,“-restart”表示重新启动服务。“-wait”表示等待时间,单位是秒,如果未能提供此值,则默认值为120秒。“-noforce”表示在停止服务时,如果所有其他操作都失败,拒绝尝试强制终止服务进程。在默认的情况下,如果服务没有在给定的超时时间内转换到停止状态,ServicePilot将尝试停止服务的进程,通过指定“-noforce”参数可关闭此行为。“-computer”表示不是使用本地计算机,而是使用网络上计算机名称(或lP地址)为的计算机上的服务。“-args”表示在启动服务时传递给定的参数集,用空格分隔每个参数。“”为服务的名称(也可以是服务的显示名称,但使用真实的服务名称更有效),不能省略,必须提供。“-verbose”表示生成详细的输出信息。如果命令中的服务名称至少包含一个空格,请务必用半角引号将其引起来。
此外,如果在批处理操作中引用该命令,我们还需要知道退出代码的含义:完成命令之后,如果操作成功,则退出代码为0;如果未成功完成,则退出代码为1。我们可以在批处理程序中通过标准的ERRORLEVEL变量访问该退出代码。
在明白了该命令的基本含义之后,我们通过几个简单的例子来进一步加深对它用法的掌握。
重新启动AppIe移动设备服务
如果iPhone、iPad或iPod touch在Windows上的iTunes中无法识别,则可能需要重新启动苹果移动设备服务。如果在连接这些设备时出现错误信息,显示因为Apple Mobile Device服务没有启动此设备不能使用,这时可执行如下命令来启动它(图2):
ServicePilot.exe-restart“Apple Mobile Device Service”
停止“慢”的或“忙”的服务
如果服务需要很长的时间才能停止,应该在使用ServicePilot时设置足够长的“等待时间”。例如,我们知道某个服务“Device Automation”可能需要两分钟才能关闭,这时可以使用这个命令来停止它(图3):
ServicePllot.exe-stop-wait 120“Device Automation”
使用参数启动服务
某些服务在启动时接受设定的一些参数,这些参数我们通常情况下是在服务的“属性”控制窗口中指定的(图4)。而现在,我们可以通过ServicePiIot命令行来提供参数。比如下面的这条命令,可以在调试模式下使用端口号8080启动“RetailConnection”服务(图5):
ServicePilot.exe-start-args“/port 8080/debug”RetailConnection
上述命令我们均可以将其写入批处理或脚本文件中保存,这样在使用时一键运行就可以控制相应的服务了。
ServicaPilot相对于NET命令的优势
NET命令在等待服务的启动或停止时,最多只能等待30秒。对于需要更长时间才能完成状态过渡的服务来说,这是一个问题。NET的无法“耐心”等待会导致批处理文件出现意外错误。例如,一个NET脚本后跟另一个NET脚本,如果服务关闭时间超过30秒,则服务停止将失败,随后的服务启动也将失败。使用NET命令向服务传递参数也比较麻烦,每个项目必须分开且各自加上引号,并以斜杠(“/”)作为前缀。而ServicePilot传递多个参数时只需写在一对引号中并用空格分开即可。
用ServicaPilot相对于SC命令的优势
SC.EXE文件也可以处理服务的启动和停止,但它也有一些缺点:与NET START不同,SC START只是发出启动服务的命令并立即结束,不会尝试等待服务转换到运行状态。因此,使用SC重新启动服务的脚本必须包含更复杂的表达式,在SC START之后,脚本必须循环,定期检查服务的状态,并在服务移动到运行状态时中断循环。ServicePilot则可以完全直接重新启动一个服务,而不会有额外的麻烦。