Synergy 1.6.2似乎与我使用的另一个实用程序(ActualTools)发生冲突,虽然我等待它们解决它的错误,但是一个简单的解决方法是在出现问题时重新启动Synergy服务。为了每次都手动保存,我改编了this脚本。在调用它时,我只是从StopService
函数中得到“错误2” - 它对应于“用户没有必要的访问权限”。这看起来很奇怪,因为我可以运行compmgmt.msc
(就像我登录的那样,而不是管理员)并在那里手动重启服务而没有任何问题或请求额外的凭据。但是,我不能从命令行使用net stop Synergy
- 我得到系统错误5(访问被拒绝)。所以,我想这与权限/特权有关。
我试过在这个剧本中摆弄这一行:
Set cimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
通过引用特权列表here - 例如,将(Tcb)
添加到安全名字对象中。但我不确定这是正确的方法,而且我无法找到与服务管理相对应的特权。
那么,在这种情况下,有没有办法获得通过脚本停止/启动服务的正确权限?作为参考,这里是完整的脚本:
Dim cimv2, oService, Result
'Get the WMI administration object
Set cimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
'Get the service object
Set oService = cimv2.Get("Win32_Service.Name='Synergy'")
If Not oService.Started Then
' the service is Not started
wscript.echo "Synergy is not started"
wscript.quit
End If
If Not oService.AcceptStop Then
' the service does Not accept stop command
wscript.echo "Synergy does not accept stop command"
wscript.quit
End If
'Stop the service
Result = oService.StopService
If 0 <> Result Then
wscript.echo "Stop Synergy error: " & Result
wscript.quit
End If
Do While oService.Started And Wait
'get the current service state
Set oService = cimv2.Get("Win32_Service.Name='Synergy'")
Wscript.Sleep 200
Loop
If oService.Started Then
' the service is Not started
wscript.echo "Synergy is already running."
wscript.quit
End If
'Start the service
Result = oService.StartService
If 0 <> Result Then
wscript.echo "Start Synergy error:" & Result
wscript.quit
End If
Do While InStr(1,oService.State,"running",1) = 0 And Wait
'get the current service state
Set oService = cimv2.Get("Win32_Service.Name='Synergy'")
Wscript.Sleep 200
Loop
答案 0 :(得分:1)
我假设您已激活UAC并希望自动启动此脚本,而不是仅手动运行一次。
据我所知,不可能从脚本中获得完全权限。您可以触发UAC提升提示,但仍需要手动确认。
使此脚本自动以所有权限运行的最简单方法是使用任务计划程序。
在那里,您可以创建在用户登录时运行的计划任务。在底部附近的“常规”选项卡中,您可以指定“以最高权限运行”选项,该选项应足以授予您所需的权限。