1

作成したサービスにパッチを適用して、サービスファイルを置き換えようとしています。そのため、ファイルが解放されるようにサービスを停止する必要があります。を使用していて、状態がSTOPPEDであることがわかるまでsc \\remote stop svcname、を使用してサービスにクエリを実行します。sc \\remote query svcnameこの時点で、サービスファイルのロックを解除する必要があります。安全のために、を使用してサービスも削除しますsc \\remote delete svcname

それでも、ファイルが解放されていないようで、削除または変更の試行は失敗します。1つの解決策がファイルを繰り返しポーリングする可能性があることは知っていますが、この方法は避けたいと思います。

助言がありますか?

4

1 に答える 1

4

Windows は、サービスが停止したときにサービスを提供するプロセスが終了することを保証しません (プロセスは複数のサービスを提供する場合があります)。送信されたメッセージを処理するときに、サービスが停止したと見なすだけです。

そのため、サービス プロセスにバグがあり、リソースを適切に解放しない場合でも、ロックされている可能性があります。私はおそらく少し待って、単にプロセスを終了するよりも.

Microsoft のhandle.exeというツールもあります(これはコマンド ライン バージョンで、GUI バージョンもあります)。このツールを使用すると、ファイルを開いているプロセスを一覧表示できます。プログラムで同じ情報を取得できるはずですが、正確な呼び出しについてはわかりません (また、管理者権限が必要です。管理者権限もツールに付与する必要があります)。そうすれば、ファイルが開いているかどうか、どのプロセスで開いているかを確認し、ファイルが終了するのを待つか、ファイルがどれかわからなかった場合は強制終了することができます。

于 2012-08-20T10:36:32.627 に答える