0

ファイルを削除する必要があるシナリオがあります。誰がファイルを保持しているのかわかりませんし、気にしません。私はそれを削除しなければなりません。(ロックタスクを殺したくありません)

私の頭に浮かぶ唯一の解決策は、http://www.emptyloop.com/unlocker/コマンド ライン インターフェイスを使用することです。

MoveFileEx マシンを再起動できないため、オプションではありません。

このための C#ish メソッド/ライブラリは他にありますか?

コンソール アプリケーション API を使用することに興奮していない

明確でない場合に備えて。私は関連するリスクを知っており、なぜこれが悪い習慣なのかについての講義は必要ありません。私が尋ねたことを行う方法を知っていれば。どうもありがとうございます!

なぜこれが悪いのかを説教したい場合は、他の人を気にしないでください##

4

2 に答える 2

1

解決策を教えることはできませんが、方向性を示すことはできます。

Window のProcess Explorerには、ハンドルを検索できる機能があります。 ここに画像の説明を入力

次にそのハンドルを選択すると、そのハンドルを所有するプロセスに移動し、それを右クリックしてハンドルを閉じ、プロセスがそのファイルに対して持っているロックを解除することもできます。

したがって、基本的には、Process Explorer が使用している API 呼び出しを見つけて、アプリケーションで自分で実行する必要があります。

于 2014-08-21T07:04:07.200 に答える
0

あなたが求めていることは、ロックの性質上不可能だと思います。
データを読み取っているときに、別のプログラムがファイルを盗んで消去できるとしたら、どう思いますか?

これらのロック解除ツールはプロセスを検出し、何らかの方法で強制的にロックを解除しようとしていると思います (おそらくプロセスをシャットダウンすることさえあります)。
これはほとんどのアプリケーションで機能する可能性がありますが、より積極的なアプリケーションもあります (ウイルス スキャナーなどを考えてみてください)。

したがって、ロックを取得する可能性を高めたいのか、またはロックを確実に取得する必要があるのか​​ を自問する必要があるかもしれません.

編集:
ロッカープロセスを終了でき、それらのファイルを本当にクリアしたい(結果に関係なく)と仮定すると、ロックを保持しているプロセスを見つけてシャットダウンできます。のこのスレッドでは、ハンドル、win32 dll、またはプラン .NET コードのいずれかを介して、どのプロセスが (c# コードで) ロックを保持しているかを追跡するためのいくつかのソリューションを提供しています。

免責事項
このようなプロセスをシャットダウンすると、そのプログラムの一貫性にひどい影響を与え、良いことより悪いことをする可能性があることに注意してください (たとえば、データベースのステータスを書き込んで途中で終了するとします)。

于 2014-08-21T06:22:43.933 に答える