2015年9月27日日曜日

VB 別プロセスが使用中で削除出来ないファイル群を葬る

いやぁ、参りますね。  途方に暮れて、格闘する事、暫し。
極稀ですが、とても、手に負えない状況に陥る事があります。  天に唾をを吐きたい気分です。
プロセスはファイルにアクセスできません。別のプロセスが使用中です。  !!!
そんな事を言われても、既に、絡んだプロセスは終了していますし、 ... 。  えっ?  どうしたの、一体?。


あっ、そうそう。
最初に断って置きましょう。
VB と、投稿タイトルに書きましたが、 VB でコーディングして 対応する訳ではありません。
餅は餅屋が ちゃんといますから ... 。  まぁ、ご覧下さい。.


自分で へなちょこ プログラムを書いていると、 時折、こんな とんでもない 状況に見舞われます。
普通に出来合いのアプリやソフトを使っていて、こうなるケースは少ないと思いますので、
そこで、投稿のタイトルに、 VB と 敢えて 書き込みました。


こんなシナリオです。

  Visual Studio (Visual Basic)  で、アイコンを別のフォルダから持って来て、ソリューション名やプロジェクト名を弄った
  暫くして、別件で、ピクチャーのフォルダにアクセスするも、 該当フォルダが 見当たらない!
  実際は、存在していて、 システム属性と隠し属性が付加されている
  所有者を確認して見ると、 何時もの 自分のまま
  所有者を再度更新の上、属性変更するも、 受け入れられず
  止む無く、 Robocopy で、一旦、属性値を換えて、 別フォルダに移動
  ここまでは、確認して、 問題はなし !
  最後の仕上げ、 不調な 元フォルダ を削除し 別フォルダの命名を戻せば終わりの筈なのに ... 。
  不調な 元フォルダ が削除出来ない !!!!!!!!! 。
  

そして、溺れる者が掴んだ藁が これ です。
いつもの、神頼み、 Microsoft さまの SysInternals 。
今回は、 movefile と pendmoves の出番です。
                                     リンク: https://technet.microsoft.com/ja-jp/sysinternals/bb842062

C:¥Windows¥system32>rd C:¥Users¥My¥Pictures¥VS_Icon¥Temp
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

C:¥Windows¥system32>C:¥Users¥My¥OneDrive¥Someone¥SysInternals_Microsoft¥SysinternalsSuite¥movefile /?

Movefile v1.01 - copies over an in-use file at boot time
usage: movefile [source] [dest]

Specifying an empty destination ("") deletes the source at boot.


C:¥Windows¥system32>RD C:¥Users¥My¥Pictures¥VS_Icon¥Temp /S
C:¥Users¥Hiro¥Pictures¥VS_Icon¥Temp、よろしいですか (Y/N)? Y
プロセスはファイルにアクセスできません。別のプロセスが使用中です。


C:¥Windows¥system32>C:¥Users¥My¥OneDrive¥Someone¥SysInternals_Microsoft¥SysinternalsSuite¥movefile "C:¥Users¥My¥Pictures¥VS_Icon¥Temp" ""

Movefile v1.01 - copies over an in-use file at boot time
Move successfully scheduled.


C:¥Windows¥system32>C:¥Users¥My¥OneDrive¥Someone¥SysInternals_Microsoft¥SysinternalsSuite¥pendmoves

PendMove v1.2
Copyright (C) 2004-2013 Mark Russinovich
Sysinternals - wwww.sysinternals.com

Source: C:¥Users¥My¥Pictures¥VS_Icon¥Temp
Target: DELETE

Time of last update to pending moves key: 2015/mm/dd 03:33


C:¥Windows¥system32>
参考迄に。  この様に、OneDrive 上に SysInternals のユーティリティを保持して利用してます。.

これで、再起動すれば、 起動とログインの間に 不調な ファイルやフォルダを 強制的に 排除出来ます。
今回のケースでは、 利用中の別プロセスが無く、削除しても問題が発生しない事が分っていますから、
この 強制的な手段が有効です。

  でも、でも、 この 別プロセスが掴んでいるファイルを操作出来ない と言う仕組みは 実は重要で大切です。
  闇雲に、今回の非常手段を適応するのは、考え物です。  最後の手段 です。  最後の。

  参考までに。
  ソフトでファイルを弄っていると、極極稀に、 異常終了や 不正設定 不全操作 等が原因で、
  今回の様なケースに遭遇します。
  オープンしていたファイルが Handle を掴まれたままソフトが終了したり(開きっ放しの状態)、
  ファイルアクセスでフォルダを OS や ソフトが  Hold したままで 属性を変更してしまったり、 ... 。
  こうなると、簡単には、対処出来ないものです。


おお、ありがたや、ありがたや。  ... ねむい ... 。



0 件のコメント:

コメントを投稿