You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用于实现计算机间文件共享的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:12:37