【问题标题】:How to check if a service is running using WMI in Python?如何在 Python 中使用 WMI 检查服务是否正在运行?
【发布时间】:2020-08-05 16:47:48
【问题描述】:

我是 Python 和一般编码的新手。我正在尝试检测某个服务是否正在运行,如果正在运行,则停止它并重新启动它。如果不存在,则抛出异常并退出。

我有以下几点:

import wmi

c = wmi.WMI()

for service in c.Win32_Service():
    if service.Name == 'genericservice':
        service.StopService()

我从我们现有的另一个脚本中借用了该代码。但是,如何添加条件语句来检查服务是否首先运行?如果它根本没有运行,然后以异常退出?

请指教。谢谢!

【问题讨论】:

    标签: python windows service wmi


    【解决方案1】:

    这可以使用win32com.client 模块中的WQL 轻松完成。

    例如,

    from win32com.client import GetObject
    WMI = GetObject('winmgmts:')
    
    if len(WMI.ExecQuery('select * from Win32_Process where Name like "%s%s"' % ("process_name",'%'))) > 0:
        pass 
    

    要以您的方式执行此操作,请使用WQL 执行类似this 的操作,以检查该服务是否确实在运行。

    如果有帮助,您可以查看tutorial

    【讨论】:

    • 非常感谢!我确实喜欢您的建议,但是,我的团队负责人坚持我只使用 WMI 而不是 Win32,因为前者更加标准化、文档化,并且比后者能做的更多。
    • 嗯,您在上面提到的那些点是正确的,但是,它也缺少一些您所期望的简单功能;或者即使它存在,我似乎也无法在文档中找到它。通过WMI 进行操作的唯一方法是使用上面链接中提到的WQL 方法创建listof 正在运行的服务,然后在您的循环中简单地检查if service in <List_of_running_services>。在平均情况下,运行时间是o(n),所以它不是很糟糕。
    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多