1

サービスの開始と停止の自動化に小さな問題があります。サービスのリストを開いservices.mscて見ると、すべて名前が付いています。ただし、このコードを実行すると、次のようになります。

Dim objService As Object
Dim objSet As Object
IsServiceRunning = False
Set objSet = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Service")
For Each objService In objSet
    If (UCase(strServiceName) = UCase(objService.Name)) And (UCase(objService.State) = UCase("Running")) Then
        IsServiceRunning = True
    End If
Next

値はリスト内のobjService.Name名前と同じではありません。たとえば、「Computer Browser」は単なる「ブラウザ」、「Distributed File System」は「dfs」、「NetLogon」は「netlogon」です。このobjServiceオブジェクトからこれらのサービスの完全で長い名前を取得する方法はありますか?これを回避することはできますが、コードをわかりやすくするために、サービスが実行されているかどうかを判断し、NET STARTまたはNET STOPコマンドライン呼び出しを行い、ログに記録するために同じ値を使用します。

4

1 に答える 1

3

objService.Captionサービスの「ロングネーム」にアクセスするために使用するだけです。

私はこのようなプロパティの名前を発見しました:

For Each objService In objSet
    For Each vElem In objService.Properties_
        Debug.Print vElem.Name; "=";
        Debug.Print vElem.Value
    Next
    Exit For
    ...
Next

objService時計の窓に入れるだけでProperties_物件を探すことができます。オブジェクトのデフォルトのプロパティ(など以外)vElemを見つけるためにもウォッチウィンドウに配置します。NameValueIsArraySWbemProperty

于 2012-06-13T08:50:03.580 に答える