web-dev-qa-db-ja.com

リモートでサービスを再開する方法は?

.netプロジェクトからリモートでサービスを開始または停止できます。

ConnectionOptions options = new ConnectionOptions();
options.Username = @"192.168.36.22\test";
options.Password = "test";
ManagementScope scope = new ManagementScope(@"\\192.168.36.22\root\cimv2", options);
scope.Connect();


ManagementOperationObserver Stop = new ManagementOperationObserver();
Stop.Completed += new CompletedEventHandler(Stop_CallBack);
try
{
    string NameServices = "ArcGIS Server";
    WqlObjectQuery query = new WqlObjectQuery("SELECT * FROM Win32_Service  WHERE Name=\"" + NameServices + "\"");
    ManagementObjectSearcher find = new ManagementObjectSearcher(scope, query);
    foreach (ManagementObject spooler in find.Get())
    {
        spooler.InvokeMethod("StopService", new object[] { });
        spooler.InvokeMethod(Start, "StopService", new object[] { });
    }
 }
....

このサービスを再開するにはどうすればよいですか?

15
novicegis

次のようにServiceControllerクラスを使用できます。

ServiceController sc = new ServiceController("ArcGIS Server", "192.168.36.22");

sc.Start();
sc.Stop();

これにより、WMIと対話するためにすべてのコードを記述する必要がなくなります。 ServiceControllerクラスを使用するには、System.ServiceProcessアセンブリへの参照を追加する必要があることに注意してください。

20
chris.house.00

サービスコントローラーが機能しなかったので、Cmdを使用して機能しました。

Process.Start("CMD.exe", "/C sc \\\\remoteMachine stop \"serviceName\"&sc \\\\remoteMachine start \"serviceName\"");

資格情報の問題を克服するために、私はこれからのクラスを使用しました https://stackoverflow.com/a/5433640/2179222 回答。

したがって、最終的には次のようになりました。

    private static void RestartService(string remoteMachine, string serviceName, string userName, string password)
    {
        using (new NetworkConnection($"\\\\{remoteMachine}", new NetworkCredential(userName, password)))
        {
            Process.Start("CMD.exe", $"/C sc \\\\{remoteMachine} stop \"{serviceName}\"&sc \\\\{remoteMachine} start \"{serviceName}\"");
        }
    }
0
Eduard Grinberg