.NET 3.5で作業していますが、ServiceControllerを使用して一部のサービスを停止する際に問題が発生します。インターネット全体を検索しましたが、問題の解決策が見つかりませんでした;)
これが私がそれをする方法です:
using(ServiceController service = new ServiceController( "Service"))
{{
試す
{{
TimeSpanタイムアウト=TimeSpan.FromSeconds(timeoutSeconds);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped、timeout);
}
キャッチ(例外例)
{{
Console.WriteLine(ex.ToString());
}
}
サービスが停止するまで待っています。次に、ライブラリを置き換えます(更新します)。そして、例外がスローされます。
UnauthorizedAccessException例外の詳細:System.UnauthorizedAccessException:パス「blablabla」へのアクセスが拒否されました。
アプリケーションを管理者として実行しているので、このパスにアクセスできると確信しています。
このコードが実行されると興味深いのは、このサービスが現在のサービスのリスト(タスクマネージャー内)から消えることです。したがって、実際には停止しますが、一部のスレッドは引き続きそれを使用する必要があるため、サービスのファイルを移動できません。自分でファイルを移動しようとしても(Serviceディレクトリに移動し、マウスを使ってファイルを移動しようとすると)できません。しかし、サービスを手動で停止すると(タスクマネージャーと「タスクの終了」)、そのファイルでやりたいことが何でもできます。では、C#コード(ServiceControllerを使用)から停止することと、タスクマネージャーを使用して停止することの違いは何ですか?
重要かどうかはわかりませんが、このアプリケーション(およびこのサービス)をWindowsServer2008のVirtualBoxで実行しています。(私はそれを他のマシンで実行する必要があり、それから私のコンピューターで実行する必要がありました)。
この問題をどのように解決できますか?;)
助けてくれてありがとう。
ピート、よろしくお願いします。