- Offizieller Beitrag
Hi,
ich prüfe mit folgender Funktion (hier zwei Varianten: per CMD und WMI) ob ein Dienst gestartet ist oder nicht.
Könnt ihr mal testen, wie bei euch die Laufzeiten sind? Beide Varianten unterscheiden sich bei mir kaum. Aber in Win 7 dauert es bei mir ca. 1,7 s, dagegen in Win XP < 0,5 s.
Edit:
Bei der Laufzeit hatte ich mich vertan: WMI-Variante ist etwa 30% schneller. Aber 0,1 s in XP vs. 0,8 s in Win7.
AutoIt
Local $fStartCMD, $fStartWMI, $t, $tCMD, $tWMI, $sResult = ''
For $n = 1 To 5
$t = TimerInit()
$fStartCMD = _GetServiceStarted_CMD('Aufgabenplanung')
$tCMD = TimerDiff($t)
$t = TimerInit()
$fStartWMI = _GetServiceStarted_WMI('Aufgabenplanung')
$tWMI = TimerDiff($t)
$sResult &= StringFormat('Ergebnis: CMD %s t=%.3f s %s WMI %s t=%.3f s%s', $fStartCMD, $tCMD/1000, @TAB, $fStartWMI, $tWMI/1000, @LF)
Next
ConsoleWrite($sResult & @CRLF)
Func _GetServiceStarted_CMD($_sService)
Local $iPID = Run(StringFormat('%s /c net start', @ComSpec), '', @SW_HIDE, 0x2)
ProcessWaitClose($iPID)
Local $sOutput = StdoutRead($iPID)
Return (StringInStr($sOutput, $_sService) ? True : False)
EndFunc
Func _GetServiceStarted_WMI($_sService)
Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
Local $colItem = $objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE DisplayName='" & _
$_sService & "'", "WQL", 0x10 + 0x20)
For $item In $colItem
Return $item.Started
Next
EndFunc
Alles anzeigen