はじめに
C#でのサービスの開始・停止などは「System.ServiceProcess.ServiceControllerクラス」を利用して行うのが結構一般的ですが、今回はManagementObjectを利用した操作についての備忘録です。
本クラスを利用すると、結構汎用的にアクションを起こせるので重宝しています。
処理概要
using System.Management;
namespace sample
{
class SampleClass
{
public void ServiceUtil(string svcName, string actionName, object[] actionParams)
{
string objectPath = $"Win32_Service.Name={svcName}";
using(var srv = new ManagementObject(new ManagementPath(objectPath)))
{
try
{
var result = srv.InvokeMethod(actionName, actionParams);
Console.WriteLine(result);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
}
}
}
}
利用方法
サービス開始
string serviceName = "[serviceName]";
ServiceUtil(serviceName, "StartService", null);
※ [serviceName]には実際に起動するサービス名を記載する。
サービス停止
string serviceName = "[serviceName]";
ServiceUtil(serviceName, "StopService", null);
※ [serviceName]には実際に起動するサービス名を記載する。
サービスのモード変更
string serviceName = "[serviceName]";
string actionName = "Automatic";
ServiceUtil(serviceName, "StopService", new object[] {actionName});
※ [serviceName]には実際に起動するサービス名を記載する。
actionNameに指定できる値は下記の通りである。
アクション名 | 説明 |
---|---|
Automatick | システムの起動時に、オペレーティング システムによってサービスが開始します |
Boot | サービスがシステム ローダーによって開始されるデバイス ドライバーであることを示します。 |
Disabled | ユーザーまたはアプリケーションによってサービスが開始できないよう、サービスが無効になっていることを示します。 |
Manual | サービスが ユーザー (サービス コントロール マネージャーを使用) によって手動でのみ開始されるか、またはアプリケーションによって開始されるかを示します。 |
System | サービスが IOInitSystem 関数によって開始されるデバイス ドライバーであることを示します。 |
下記参考
最後に
Windowsサービスに関する操作は意外にシンプルにできちゃいます。
一度汎用メソッドを作っておけば、あとは呼び出すだけです。
是非、参考にしてみてください。