1

WMI を使用して、.NET コードからローカル コンピューター上のサービスを開始、停止、およびクエリするにはどうすればよいでしょうか。(私はC#を使用しています)

ServiceController クラスを使用してこれを行うための適切で正確な回答を見つけましたが、可能であれば WMI を使用したいと考えています。

4

1 に答える 1

6

ServiceControllerより直感的なクラスでWMI を使用したい場合は、この記事を参照してください(カラー スキームについては申し訳ありませんが、必要なものは含まれています)。

サンプルコード (ここでのエラー処理は、私の好みで少しハードコードされています):

using System.Management;

public static ReturnValue StartService(string svcName)
{
    string objPath = string.Format("Win32_Service.Name='{0}'", svcName);
    using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
    {
        try
        {
            ManagementBaseObject outParams = service.InvokeMethod("StartService",
                null, null);
            return (ReturnValue)Enum.Parse(typeof(ReturnValue),
            outParams["ReturnValue"].ToString());
        }
        catch (Exception ex)
        {
            if (ex.Message.ToLower().Trim() == "not found" || 
                ex.GetHashCode() == 41149443)
                return ReturnValue.ServiceNotFound;
            else
                throw ex;
        }
    }
}
于 2010-10-15T00:40:46.370 に答える