.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で実行しています。(私はそれを他のマシンで実行する必要があり、それから私のコンピューターで実行する必要がありました)。
この問題をどのように解決できますか?;)
助けてくれてありがとう。
ピート、よろしくお願いします。