2012-03-22 20 views
2

Startup Typeが "Automatic(Delayed Start)"に設定されているWindowsサービスを検出するには、誰かが(Pythonで)気の利いたトリックを持っていますか?StartModeが "Automatic(Delayed Start)"のWindowsサービス用のPython WMIクエリ

「自動」と「自動(遅延開始)」の両方で構成されたサービスは、「自動」のStartModeで表示されます。

>>> 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' 

は、例えば、私の地元のWindows 7のボックス使用Services.mscとで私は、「Windowsの更新」を「自動(遅延開始)」のために設定されていることが分かり、まだWMIは、単に「Auto」に示し私はどんな提案も歓迎する。

乾杯、

ロブ

答えて

2

@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 
+0

_winregの例に感謝します。乾杯。 – Rob

+0

いつでも、私は '_winreg'(または3.0+で' winreg')が標準ライブラリの一部であることを愛しています:) – Bryan

+0

Sweet! _winreg.ConnectRegistry()を使用して私はリモートボックスに接続してから、キー/値を問い合わせることができます。RRUZとBEARGLEの両方に再び感謝します! – Rob

4

これは、WMIの制限では、(WMIを使用して)AutomaticAutomatic (Delayed)区別する方法がありません。この問題を回避するには、WindowsレジストリHKLM\SYSTEM\CurrentControlSet\Servicesを読み、DelayedAutoStartというREG_DWORD値を確認します。

+0

私はそこになかったものを見つけようとしていました。私は正しい方向に向いてくれてとても感謝しています。 – Rob

関連する問題