23
6月
2026
用于在 MS Windows 中重启服务的脚本
16:48

用于在 MS Windows 中重启服务的脚本

23 6月 2026 16:48

用于在 Windows 系统中重启服务(添加到任务计划程序)的脚本。

“Hasp Loader”服务用于加载 1C 财务软件的网络许可证密钥,该服务会周期性地显示缺少网络许可证的消息。1C 支持团队建议的解决方案是每天使用任务计划程序重启一次“Hasp Loader”服务。提示信息为:“Hasp Loader 的‘零’许可证已用完,这些许可证用于登录。” 任务是编写一个脚本来停止和启动“Hasp Loader”服务。

以下是我编写的 VBS(VB Shell)脚本,用于重启名称由 sName 变量指定的服务。该脚本使用 WMI(Windows 管理规范)编程,并采用 GPL 许可。

On Error Resume Next
sName="Hasp Loader"
Set objService = GetObject _
("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number  0 Then
    WScript.Echo Err.Number & ": " & Err.Description
    WScript.Quit
End If

If sName="" Then
    WScript.Echo "The service name is empty."
    WScript.Quit
End If

For Each objS In objService.ExecQuery _
("Select * FROM Win32_Service WHERE Name ='" & sName & "'" )
    Exit For
Next
If IsObject (objS) Then 
 WScript.Echo objS.Name & " - StopService()"
 ret = objS.StopService()
 DebugPrint ret

 WScript.Sleep 1500 ` 1,5s

 WScript.Echo objS.Name & " - StartService()"
 ret = objS.StartService()
 DebugPrint ret

Else
 WScript.Echo sName & " - service not found"
End If

Sub  DebugPrint(number)
Select Case number
   Case 0
      WScript.Echo "Done!"
   Case 1
      WScript.Echo "Error. Not supported"
   Case 2
      WScript.Echo "Error. No user rights"
   Case 3
      WScript.Echo "Error. Depends"
   Case 4
      WScript.Echo "Error. Wrong request"
   Case 5
      WScript.Echo "Error. Wrong state"
   Case 6
      WScript.Echo "Error. Not started"
   Case 7
      WScript.Echo "Error. Timed out"
   Case 8
      WScript.Echo "Error. Unknown failure"
   Case 9
      WScript.Echo "Error. Wrong path"
   Case 10
      WScript.Echo "Error. Already started"
   Case 11
      WScript.Echo "Error. DB is locked"
   Case 12
      WScript.Echo "Error. Dependency is deleted"
   Case 13
      WScript.Echo "Error. Dependency not found"
   Case 14
      WScript.Echo "Error. Disabled"
   Case 15
      WScript.Echo "Error. No authenticity"
   Case 16
      WScript.Echo "Error. Uninstalling"
   Case 17
      WScript.Echo "Error. No exec process"
   Case 18
      WScript.Echo "Error. Dependency is cycled"
   Case 19
      WScript.Echo "Error. Already started by this name"
   Case 20
      WScript.Echo "Error. Bad chars in name"
   Case 21
      WScript.Echo "Error. Bad parameters"
   Case 22
      WScript.Echo "Error. Bad account"
   Case 23
      WScript.Echo "Error. Service exists"
   Case 24
      WScript.Echo "Error. Service is paused"
End Select
End Sub

在 Windows 命令行中运行脚本:

cscript.exe hasp.vbs

在任务计划程序中运行脚本:

  • 简单任务

  • 操作:cscript.exe

  • 参数://B hasp.vbs

建议指定文件的完整路径,例如:C:\Windows\system32\cscript.exe 和 C:\Windows\hasp.vbs

并且仅将权限分配给管理员,由管理员使用任务计划程序重启服务。


参考资料:


下面列出了 StopService() 和 StartService() 方法的返回代码:

0 请求已接受。
1 请求不受支持。
2 用户没有所需的访问权限。
3 由于其他正在运行的服务依赖于此服务,因此无法停止该服务。
4 请求的控制代码无效或不适用于此服务。
5 由于服务状态(Win32_BaseService. 状态属性)为 0、1 或 2,因此无法将请求的控制代码发送到该服务。
6 服务未运行。
7 服务未在规定时间内响应启动请求。
8 启动服务时发生未知故障。
9 未找到服务可执行文件的目录路径。
10 服务已在运行。
11 添加新服务的数据库已锁定。
12 此服务所依赖的某个服务已从系统中移除。
13 此服务找不到其依赖服务所需的服务。
14 此服务已在系统中禁用。
15 此服务不支持在系统上运行所需的身份验证。
16 此服务正在从系统中移除。
17 此服务没有执行线程。
18 服务启动时存在循环依赖。
19 已有同名服务正在运行。
20 服务名称包含无效字符。
21 传递给服务的参数无效。
22 运行此服务的帐户无效或没有启动服务的权限。
23 此服务已存在于系统可用服务数据库中。
24 该服务目前已在系统中暂停。



相关出版物