VBScript - WinMP中的StartMode返回服务未知(但不是Win7)

时间:2013-05-07 00:18:36

标签: service vbscript

啊......太沮丧了...希望有人在这里帮忙!

有一个名为ScreenConnect的软件产品允许您将其安装在您自己的服务器上,并通过此安装设置有人值守和无人值守的远程访问会话。我和很多客户一起使用它,但是在那些客户端的机器上设置无人值守的安装要容易得多,我将需要多次访问。但是,有些客户希望能够控制我何时可以远程访问,何时无法访问,而且由于软件产品还没有内置此功能,我想我只需创建两个vbscript文件桌面 - 如果服务打开则关闭服务(反之亦然),另一个将服务的启动类型更改为自动(如果设置为手动),反之亦然。我能够轻松地获得启动/停止服务vbscript文件:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
    ("select State from Win32_Service where Name LIKE '%ScreenConnect%'")

For Each objService in colRunningServices
Wscript.Echo "State: " & objService.State
    If objService.State <> "Running" Then
        errReturn = objService.StartService()
    Wscript.Echo "FalconRemote Started"
    Else
    errReturn = objService.StopService()
    Wscript.Echo "FalconRemote Stopped"
    End If
Next

但是,对于我的生活,我无法在Windows XP上使用自动/手动启动类型的vbscript。如果我将它简化为骨骼并且只是想让vbscript告诉我启动的当前状态(即手动,自动,禁用),这显然是vbscript知道所以它可以根据那些信息,那就是我放在一起的东西:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
    ("select StartMode from Win32_Service where Name LIKE '%ScreenConnect%'")

For Each objService in colRunningServices
Wscript.Echo "StartMode: " & objService.PathName
Next

但是,返回“未知”而不是“手动”,“禁用”或“自动”等可接受的值 - 我不知道为什么它会返回“未知”!!!

我已经尝试将第五行更改为:

("select * from Win32_Service where Name LIKE '%ScreenConnect%'")

或者

("select StartMode from Win32_Service where DisplayName LIKE '%ScreenConnect%'")

但它似乎没有效果。

如果我在上面的脚本中为其他服务更改ScreenConnect,例如helpsvc(使用Name)或Help and Support(使用DisplayName),它可以工作!它在Windows 7机器上运行良好。为什么它不适用于Windows XP机器?有任何想法吗????我尝试安装Mozilla Firefox 20(使用Mozilla维护服务),它可以正常读取该服务的启动模式(它没有内置到WinXP中),那么为什么不读取该服务的启动模式呢?

非常感谢任何帮助!

感谢。

  • 马克

1 个答案:

答案 0 :(得分:0)

我刚刚遇到这个问题。

我不确定Windows服务是如何处于这种状态的,但似乎Windows服务处于“未知”状态。

例如,可能是文件系统上不再存在可执行文件,但Windows服务(注册表)条目仍然(部分)存在。

在任何情况下,只需删除Windows服务条目即可解决问题。

可以使用以下命令行删除Windows服务,例如:

sc delete "ScreenConnect service name"