WMI-запрос Python для служб Windows с начальным режимом «Автоматический (отложенный запуск)» - PullRequest
2 голосов
/ 22 марта 2012

У кого-нибудь есть хитрый трюк (на Python) для обнаружения служб Windows, которые настроены с типом запуска «Автоматический (отложенный запуск)»?

Я думал, что WMI будет подходить, но службынастроенный как «Автоматический» и «Автоматический (отложенный запуск)» оба отображаются с StartMode «Auto».

Например, на моем локальном компьютере Windows 7 с использованием Services.msc я вижу, что «Центр обновления Windows»настроен на «Автоматический (отложенный запуск)», а WMI просто показывает «Авто»:

>>> c = wmi.WMI()
>>> local = c.Win32_Service(Caption='Windows Update')
>>> len(local)
1
>>> print local[0]

instance of Win32_Service
{
        AcceptPause = FALSE;
        AcceptStop = TRUE;
        Caption = "Windows Update";
        CheckPoint = 0;
        CreationClassName = "Win32_Service";
        Description = "Enables the... <cut for brevity> ...(WUA) API.";
        DesktopInteract = FALSE;
        DisplayName = "Windows Update";
        ErrorControl = "Normal";
        ExitCode = 0;
        Name = "wuauserv";
        PathName = "C:\\Windows\\system32\\svchost.exe -k netsvcs";
        ProcessId = 128;
        ServiceSpecificExitCode = 0;
        ServiceType = "Share Process";
        Started = TRUE;
        StartMode = "Auto";
        StartName = "LocalSystem";
        State = "Running";
        Status = "OK";
        SystemCreationClassName = "Win32_ComputerSystem";
        SystemName = "MEMYSELFANDI";
        TagId = 0;
        WaitHint = 0;
};

>>> local[0].StartMode
u'Auto'

Я приветствую любые предложения.

Приветствия, Роб

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Это ограничение WMI, невозможно различить Automatic и Automatic (Delayed) (используя WMI). В качестве обходного пути вы можете прочитать реестр Windows HKLM\SYSTEM\CurrentControlSet\Services и проверить значение REG_DWORD с именем DelayedAutoStart.

2 голосов
/ 23 марта 2012

Как уже упоминалось @RRUZ, отложенный автозапуск не отображается через WMI.Вот пример кода для запроса реестра.

from _winreg import OpenKey, QueryValueEx, HKEY_LOCAL_MACHINE

# assume delayed autostart isn't set
delayed = False

# registry key to query
key = OpenKey(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\services\wuauserv')
try:
    delayed = bool(QueryValueEx(key, 'DelayedAutoStart')[0])
except WindowsError, e:
    print 'Error querying DelayedAutoStart key: {0}'.format(e)

print delayed
...