ファイルはどのプロセスによってロックされていますか?
-
21-09-2019 - |
質問
.Net で、どのプロセスがファイルをロックしたかを正確に確認する方法はありますか?
編集:これは、現時点ではユーザーが使用している別のプログラム (Excel など) によってファイルが開かれているため、ファイルを変更したり開くことができないことをユーザーに知らせたいためです。これがお役に立てば幸いです。
解決
これに対する簡単な答えは「ノー」です。
ただし、長い答えは、この情報を見つけるために使用できるさまざまな API 呼び出しや WMI メソッドがあるが、それが迅速かつ簡単であることを期待しないでください。
API 呼び出しを使用する場合は、以下を参照してください。 NtQueryシステム情報 SYSTEM_PROCESS_INFORMATION パラメータを使用した関数。これは、素晴らしい免責条項が付いた、素敵な「文書化されていない」メソッドの 1 つです。
ntquerySysteminformationは、将来のバージョンのWindowsで変更または利用できない場合があります。アプリケーションは、このトピックにリストされている代替機能を使用する必要があります。
したがって、WMI を使用することを優先して、それを回避することをお勧めします。
使用できます WMI Win32_プロセス クラスを使用して、マシン上で現在実行中のすべてのプロセスを列挙し、探しているファイルが見つかるまで各プロセスが保持しているすべてのハンドルを列挙します。残念ながら、「どのプロセスがこのファイルをロックしているのか」を調べる簡単な方法はありません。目的のファイルをロックしているプロセスが見つかるまで、プロセス リストを検索する必要があります。
CodeProject に関する次のタイトルの素敵な記事をお勧めします。 方法:C# 経由の WMI の(ほぼ)すべて パート 2:プロセス. 。(そのようなものが好きな場合は、パート1も読むと良いです)
他のヒント
良い...それは正確には .NET の方法ではありません...ただし、簡単なユーティリティを使用して調べたいだけだと仮定して、チェックアウトしてください SysInternals からのハンドル.
誰かのように見えますが、これを考え出した(そしてあなたにもいくつかのフランス語を学ぶこと:))