web-dev-qa-db-ja.com

Windowsファイル共有ロックの解放

この問題はときどき発生します。ビルドマシンは、通常のWindowsファイル共有を介してファイルにアクセスできます。誰かがマシン上でリモートでフォルダーを参照し、ウィンドウを一晩開いたままにすると、ビルドは失敗します(現在のように)。開いたままのエクスプローラーウィンドウは、ソースツリーのサブフォルダーの1つをポイントします。ビルドはソースを削除し、ビルドの前にクリーンチェックアウトを実行します。削除は失敗しています。

今、ビルドを機能させたいと思います。私は自宅からログインしていますが、ビルドマシンを再起動したくありません。マシンを探している人とファイルを把握することができず、マシンをリモートでリブートすることもできません。

Windows共有にロックがある場合、ロックプロセスはシステムであるため、通常のロックのように、それを強制終了することはできません。

誰もがマシンを再起動することなく共有フォルダのロックを解除する方法を知っていますか?

31
Jonathan Wright

ソリューションを見つけました。

  1. Process Explorer を使用してプロセスを見つけます。

    1. ダウンロードして展開 procexp.exe
    2. プロセスエクスプローラーで、[検索]メニューの[ハンドルまたはDLLの検索...]コマンドを使用します。
    3. 削除に問題があるディレクトリの名前を入力します
    4. その名前に一致する開いているファイルのリストが表示されます。推測して、削除に失敗したものを見つけます。ファイルがWindows共有によってロックされている場合、ファイルを保持しているプロセスはシステムになります
    5. 開いたままのディレクトリを書き留めます
  2. Unlockerをダウンロードしてインストールします(Warning:マルウェアが含まれているため、リンクは削除されました)

    1. Unlockerをインストールし、Explorer拡張機能やその他のジャンクのオプションを無効にします
  3. ディレクトリのロックを解除します

    1. Cmdウィンドウを開き、C:\ Program Files\Unlockerに移動します
    2. Cmdウィンドウから、Unlocker.exe "the-path-to-the-locked-folder"を実行します
    3. ロック解除を確認するダイアログがポップアップ表示されます。ロック解除ボタンを使用してファイルをロック解除します

これでディレクトリのロックが解除され、削除できるようになりました。

23
Jonathan Wright

ネットワーク上でファイルを共有するサーバーの管理者である場合、Windowsの組み込み機能を使用できます。

  1. [スタート]→[マイコンピューター]→右クリック→[管理]をクリックすると、コンピューター管理コンソールが表示されます
  2. 左側のナビゲーションで、[システムツール]→[共有フォルダー]に移動します。
  3. ここで共有、セッション、および開いているファイルを表示できます。これにより、誰がどのワークステーションからどのファイルを開いたかを知ることができます。
  4. リスト内のアイテムを右クリックして、ファイルロックを解除できます。

お役に立てれば。

27
sudheeshix

プロセスハッカーを試す: https://wj32.org/processhacker/

プロセスハッカーは、ステロイドのプロセスエクスプローラーに似ています。

問題のプロセスをfindするには、CTRL + Fを押すか、[DLLのハンドルを検索]ボタンをクリックしてファイル名を検索します。

[ハンドルの検索]ダイアログでファイルを見つけたら、そのファイルを右クリックして[閉じる]を選択します。 (少なくともv2.39.124の場合)

古いバージョンでは、プロセスのコンテキストメニューに「ターミネーター」オプションがありました。問題のプロセスを右クリックします-> Miscellaneous-> Terminator->終了方法を選択します。一部は危険な可能性があり、意図しない結果になる可能性があることに注意してください。

5
Charles Burns

私は同様の問題を抱えていましたが、上記の提案はいずれも自動ロックオーバービルドには適していません(元のポスターが暗示しているように)。

確実に機能すると思われる唯一の方法は、共有自体を削除し、ビルドを作成してから、共有を追加し直すことです。共有を自動的に削除する1つの方法を次に示します。

D:\ Projects> net share Projects/DELETE/Y

ユーザーはプロジェクトでファイルを開いています。操作を続行すると、ファイルが強制的に閉じられます。

プロジェクトは正常に削除されました。

(注:共有する必要がある特権グループが面倒な場合、共有を再度自動的に作成するのは面倒です。)

1
Sean

OpenFiles.exeHandle.exe の両方を使用することで、任意の順序で実行でき、リソースを完全にロック解除できます。

OpenFiles:ファイル共有セッションを切断するには

Handle.exe:開いているハンドルを解放します(システムプロセスであるため、pid4に属するハンドルを閉じないでください)

Powershell、バッチ、または任意の言語を使用して、これを自動化できます。

1
Cogent

もう1つのオプションは、Windows Vista以降、システムに組み込まれているWindowsツールを使用することです。

リソースの監視:perfmon.exe /res

抽出元: Http://www.sysadmit.com/2017/06/windows-how-to-know-that-process-has-open-a-file.html

0
Panuels