检查后台打印程序状态(运行 或否)
Checking Print Spooler status (running or not)
我需要检测 Print Spooler 服务是否 运行。我可以找到 VB.NET 的各种资源(例如,使用 ServiceProcess.ServiceController
实际操作服务),但没有找到 VB6.
有什么方法可以检查 VB6 中的 Print Spooler 是否是 运行?最好开始它,但没有它我也能活下来。
我们在 VBA/VB6/VBScript 和命令提示符中使用 wmi。
这列出了进程
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
For Each objItem in colItems
msgbox objitem.name & " PID=" & objItem.ProcessID & " SessionID=" & objitem.sessionid
' objitem.terminate
Next
这是在命令提示符下输入的。
wmic process get
您会看到您可以使用 wmic 帮助
获取 VBS methods/properties
wmic/?
wmic进程/?
wmic 进程获取 /?
所以wmic service get caption,status
所以
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Service")
For Each objItem in colItems
msgbox objitem.name & " " & objitem.status
Next
由于只有一个Print Spooler
,您可以查询Win32_Service
class 以获取单个实例。然后,检查 Started
属性 以确定它是否是 started/running:
Set objSpooler = GetObject("winmgmts:root\cimv2:Win32_Service.Name='Spooler'")
If objSpooler.Started Then
MsgBox "Print Spooler is running."
Else
MsgBox "Print Spooler is NOT running."
End If
已经发布的两个答案都很好(并且会解决问题)但我只是想回答我自己的问题以合并其他地方给出的答案(用户 Bonnie West 在 VBForums.com),因为它给出了另一种方法,可能对发现此问题的其他人有用:
Option Explicit 'In a standard Module
Private Sub Main()
With CreateObject("Shell.Application") 'Or New Shell if Microsoft Shell Controls And Automation is referenced
If .IsServiceRunning("Spooler") Then
.ServiceStop "Spooler", False
Else
.ServiceStart "Spooler", False
End If
End With
End Sub
我需要检测 Print Spooler 服务是否 运行。我可以找到 VB.NET 的各种资源(例如,使用 ServiceProcess.ServiceController
实际操作服务),但没有找到 VB6.
有什么方法可以检查 VB6 中的 Print Spooler 是否是 运行?最好开始它,但没有它我也能活下来。
我们在 VBA/VB6/VBScript 和命令提示符中使用 wmi。
这列出了进程
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
For Each objItem in colItems
msgbox objitem.name & " PID=" & objItem.ProcessID & " SessionID=" & objitem.sessionid
' objitem.terminate
Next
这是在命令提示符下输入的。
wmic process get
您会看到您可以使用 wmic 帮助
获取 VBS methods/propertieswmic/? wmic进程/? wmic 进程获取 /?
所以wmic service get caption,status
所以
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Service")
For Each objItem in colItems
msgbox objitem.name & " " & objitem.status
Next
由于只有一个Print Spooler
,您可以查询Win32_Service
class 以获取单个实例。然后,检查 Started
属性 以确定它是否是 started/running:
Set objSpooler = GetObject("winmgmts:root\cimv2:Win32_Service.Name='Spooler'")
If objSpooler.Started Then
MsgBox "Print Spooler is running."
Else
MsgBox "Print Spooler is NOT running."
End If
已经发布的两个答案都很好(并且会解决问题)但我只是想回答我自己的问题以合并其他地方给出的答案(用户 Bonnie West 在 VBForums.com),因为它给出了另一种方法,可能对发现此问题的其他人有用:
Option Explicit 'In a standard Module
Private Sub Main()
With CreateObject("Shell.Application") 'Or New Shell if Microsoft Shell Controls And Automation is referenced
If .IsServiceRunning("Spooler") Then
.ServiceStop "Spooler", False
Else
.ServiceStart "Spooler", False
End If
End With
End Sub