检查打印后台处理程序状态(是否运行)

时间:2015-08-07 10:01:28

标签: vba vbscript vb6 spooler print-spooler-api

我需要检测Print Spooler服务是否正在运行。我可以找到VB.NET的各种资源(例如,使用ServiceProcess.ServiceController实际操作服务),但VB6没有。

有没有办法检查Print Spooler是否在VB6中运行?理想情况下,启动它,但没有它我可以生存。

3 个答案:

答案 0 :(得分:4)

我们在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方法/属性

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

答案 1 :(得分:2)

由于只有一个Print Spooler,您可以查询单个实例的Win32_Service类。然后,检查Started属性以确定它是否已启动/运行:

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

答案 2 :(得分:1)

已发布的两个答案都很好(并且会解决问题)但我只是想回答我自己的问题,以便在其他地方(由用户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

Source