3

「Spooler」という名前のウィンドウ サービスを再起動したいのですが、次のコードを実行しましたが、うまくいきません。コードは

using System.ServiceProcess;

ServiceController service = new ServiceController("Spooler");

if ((service.Status.Equals(ServiceControllerStatus.Stopped)) ||
    (service.Status.Equals(ServiceControllerStatus.StopPending)))
{
    service.Start();
}
else
{
    service.Stop();
    service.Start();
}

例外は

「System.InvalidOperationException: コンピューター '.' でサービス Spooler を開始できません。 ---> System.ComponentModel.Win32Exception: サービスのインスタンスが既に実行されています。

--- 内部例外スタック トレースの終了 ---

System.ServiceProcess.ServiceController.Start (文字列 [] 引数) で

System.ServiceProcess.ServiceController.Start() で

D:\samplecodes\servicerestart\servicerestart\Form1.cs:line 33 の servicerestart.Form1.button1_Click(オブジェクト送信者、EventArgs e) で"

4

2 に答える 2

9

WaitForStatusサービスを停止した後、メソッドを使用してサービスを再開する前に待機する必要があります。

else
{
    service.Stop();
    service.WaitForStatus(ServiceControllerStatus.Stopped);
    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running);
}
于 2013-03-03T08:31:20.667 に答える
0

問題は、サービスの開始と停止に管理者権限が必要であることだと思います。これが、必要な権限を付与する必要がある理由です。

これを行うには、ISS のアプリケーション プールの ID を LocalSystem に変更します。

この助けを願っています

于 2014-01-23T07:10:49.343 に答える