用于实现计算机间文件共享的VBScript脚本无法运行求助
FDResPub服务重启VBS脚本修复方案
问题根源
你原来的脚本有几个关键错误导致服务无法停止:
- 调用
sc.exe的方式错误:cmd sc.exe stop FDResPub没有给cmd加/c参数,cmd只会打开窗口而不执行命令 - 固定等待3秒不可靠:服务停止时间不确定,硬等可能没等服务停就启动,或者浪费时间
- 无差别终止所有
cmd.exe:完全没必要,还会误杀其他正在运行的cmd进程
修正后的完整脚本
'========= 以管理员身份运行 ====================' If WScript.Arguments.length = 0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 WScript.Quit End If '========= 核心服务重启逻辑 ====================' Set oShell = WScript.CreateObject("WSCript.shell") Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") ' 停止FDResPub服务 oShell.Run "sc.exe stop FDResPub", 0, True ' 0=隐藏窗口, True=等待命令执行完成 ' 等待服务完全停止(最多等30秒) Dim service, waitCount waitCount = 0 Do Set service = oWMI.Get("Win32_Service.Name='FDResPub'") If service.State = "Stopped" Then Exit Do WScript.Sleep 1000 waitCount = waitCount + 1 Loop Until waitCount >= 30 ' 如果服务已停止,启动服务 If service.State = "Stopped" Then oShell.Run "sc.exe start FDResPub", 0, True MsgBox "FDResPub服务已成功重启" Else MsgBox "FDResPub服务停止超时,请手动检查" End If
关键改进点
- 直接调用
sc.exe(无需cmd中转,也可以用cmd /c sc.exe ...) - 执行命令时加
True参数,让脚本等待命令执行完成再继续 - 循环检查服务状态,直到服务停止或超时,避免固定等待的不确定性
- 移除了无差别终止cmd进程的错误代码
- 增加超时判断,避免无限等待
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

