ac#フォームアプリケーションからWindowsサービスを開始および停止するにはどうすればよいですか?
質問する
56174 次
5 に答える
75
への参照を追加しますSystem.ServiceProcess.dll
。次に、 ServiceControllerクラスを使用できます。
// Check whether the Alerter service is started.
ServiceController sc = new ServiceController();
sc.ServiceName = "Alerter";
Console.WriteLine("The Alerter service status is currently set to {0}",
sc.Status.ToString());
if (sc.Status == ServiceControllerStatus.Stopped)
{
// Start the service if the current status is stopped.
Console.WriteLine("Starting the Alerter service...");
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
// Display the current service status.
Console.WriteLine("The Alerter service status is now set to {0}.",
sc.Status.ToString());
}
catch (InvalidOperationException)
{
Console.WriteLine("Could not start the Alerter service.");
}
}
于 2012-06-16T11:07:02.863 に答える
30
まず、System.ServiceProcessアセンブリへの参照を追加します。
始めること:
ServiceController service = new ServiceController("YourServiceName");
service.Start();
var timeout = new TimeSpan(0, 0, 5); // 5seconds
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
止まる:
ServiceController service = new ServiceController("YourServiceName");
service.Stop();
var timeout = new TimeSpan(0, 0, 5); // 5seconds
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
どちらの例も、サービスが新しいステータス(実行中、停止中など)に達するまで待機する方法を示しています。WaitForStatusのタイムアウトパラメータはオプションです。
于 2012-06-16T11:09:03.153 に答える
3
汚れがありますが、同じです。
シェルコマンドを実行するだけ です。
NET STOP "MYSERVICENAME"
NET START "MYSERVICENAME"
編集:「より汚い」を拡張したい:
1。遅い。
2.これはいくつかの巧妙な脆弱性をもたらす可能性があります
3.それは「理解できない」コードです
4.それは非常に移植性がありません(確かに.NETCoreを使用している場合)
私はそれがもっと間違っていると確信しています...
しかし、あなたが小さな社内ツールを検索するなら...それはうまくいくでしょう。
(一時的なものと言いたいのですが、一時的なものが最も良いです!)
于 2012-06-16T11:09:19.233 に答える
3
あなたはこのようにそれをすることができます、サービスコントローラーの詳細
ServiceController sc = new ServiceController("your service name");
if (sc.Status == ServiceControllerStatus.Stopped)
{
sc.Start();
}
同様に、stopメソッドの使用を停止できます
sc.Stop();
于 2012-06-16T11:05:23.283 に答える
0
// Check whether the U-TEST RTC service is started.
ServiceController sc = new ServiceController();
sc.ServiceName = "U-TEST RTC";
m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgStatusService"), sc.Status.ToString()), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
if (sc.Status == ServiceControllerStatus.Stopped)
{
m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgStartService")), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
var timeout = new TimeSpan(0, 0, 5); // 5seconds
sc.WaitForStatus(ServiceControllerStatus.Running, timeout);
m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgNowService"), sc.Status.ToString()), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
}
catch (InvalidOperationException)
{
m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgExceptionStartService")), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
}
}
于 2017-12-19T11:06:15.727 に答える