Windowsファイル共有ロックの解放
質問
この問題はときどき発生します。ビルドマシンは、通常のWindowsファイル共有を介してファイルにアクセスできます。誰かがマシン上のフォルダーをリモートで参照し、ウィンドウを一晩開いたままにすると、ビルドは失敗します(現在のように)。エクスプローラーウィンドウは、ソースツリーのサブフォルダーの1つでポイントを開いたままにしました。ビルドはソースを削除し、ビルドの前にクリーンチェックアウトを実行します。削除に失敗しています。
今、ビルドを機能させたいと思います。私は自宅からログインしていますが、ビルドマシンを再起動したくないです。マシンを探している人とファイルを把握できず、マシンをリモートでリブートすることもできません。
Windows共有にロックがある場合、ロックプロセスはシステムであるため、通常のロックのように、それを強制終了することはできません。
マシンを再起動せずに共有フォルダのロックを解除する方法を知っている人はいますか?
解決 2
解決策を見つけました。
-
Processを使用してプロセスを検索しますエクスプローラー:
- procexp.exe をダウンロードして抽出します
- Process Explorerで" Find Handle or DLL ..."を使用します。 " Find"からのコマンドメニュー
- 削除に問題があるディレクトリの名前を入力します
- その名前に一致する開いているファイルのリストが表示されます。推測して、削除に失敗したものを見つけます。ファイルがWindows共有によってロックされている場合、ファイルを保持しているプロセスはシステムになります
- 開いたままにしたディレクトリを書き留めます
-
Unlockerをダウンロードしてインストールします(警告:マルウェアが含まれているため、リンクは削除されました)
- Unlockerをインストールし、Explorer拡張機能やその他のジャンクのオプションを無効にします
-
ディレクトリのロックを解除
- cmdウィンドウを開き、C:\ Program Files \ Unlockerに移動します
- cmdウィンドウからUnlocker.exe" the-path-to-the-the-locked-folder"を実行します
- ロックの解除を確認するダイアログがポップアップ表示されます。ロック解除ボタンを使用してファイルをロック解除します
これでディレクトリのロックが解除され、削除できるようになりました。
他のヒント
ネットワーク上でファイルを共有するサーバーの管理者である場合、Windowsの組み込み機能を使用できます。
- 開始→マイコンピューター→右クリック→管理はあなたをコンピュータに導きます 管理コンソール
- 左パネルで、システムツールに移動します→共有フォルダー
- 共有、セッション、&ここでファイルを開きます。これにより、誰がどのワークステーションからどのファイルを開いたかを知ることができます。
- リスト内のアイテムを右クリックして、ファイルロックを解除できます。
これがお役に立てば幸いです。
プロセスハッカーを試す: https://wj32.org/processhacker/
プロセスハッカーは、ステロイドのプロセスエクスプローラーに似ています。
問題のプロセスを見つけるには、CTRL + Fを押すか、「DLLのハンドルを検索」をクリックします。ボタンをクリックしてファイル名を検索します。
[ハンドルの検索]ダイアログでファイルを見つけたら、そこでファイルを右クリックして[閉じる]を選択します。 (少なくともv2.39.124の場合)
以前のバージョンには「ターミネーター」がありました。プロセスのコンテキストメニューのオプション。
問題のプロセスを右クリック-> その他
-> ターミネーター
-> 終了方法を選択。いくつかはおそらく危険であり、意図しない結果になる可能性があることに注意してください。
同様の問題が発生しましたが、上記の提案はいずれも、ロックを探して殺すために手作業が必要なため、自動化されたオーバーナイトビルドに適していません(元のポスターが暗示しているように)。
確実に機能すると思われる唯一の方法は、共有自体を削除し、ビルドを作成してから、共有を追加し直すことです。共有を自動的に削除する方法の1つを次に示します。
D:\ Projects> net share Projects / DELETE / Y
ユーザーはプロジェクトでファイルを開いています。操作を続行すると、ファイルが強制的に閉じられます。
プロジェクトは正常に削除されました。
(注:共有する必要がある特権グループが乱雑な場合、共有を再度自動的に作成するのは面倒です。)
その方法は、 OpenFiles.exe と Handle.exe 任意の順序で実行でき、リソースのロックが完全に解除されます。
OpenFiles:ファイル共有セッションを切断する
Handle.exe:開いているハンドルを解放する(システムプロセスであるため、pid4に属するハンドルを閉じないでください)
PowerShell、バッチ、または任意の言語を使用して、これを自動化できます。
別のオプションは、Windows Vista以降、システムに組み込まれているWindowsツールを使用することです。
モニターリソース: perfmon.exe / res
抽出元: Http://www.sysadmit.com/2017/06/windows-how-to-know-that-process-has-open-a-file.html