周回遅れの日記

はてなダイアリーから移転

書き込み用一時ファイルが消せない問題

Windows 7 で「ディスクに書き込む準備ができたファイル」を消せずに数日間悩んでいたが、解決した。
カスタマイズすると分かりにくくなる、という良い例かもしれない。
Windowsを起動すると、「ディスクへの書き込みの準備ができたファイルがあります。ファイルをここで表示するには、このバルーンをなんたらかんたら」なんてメッセージが通知領域に出るようになった。

光学ドライブの一時ファイルになにか登録されてしまったようだ。

エクスプローラ光学ドライブを開くと、たしかに一時ファイルに何か入っている。
自分では何もしていないつもりだが、何かの拍子に操作を誤って登録されてしまったものと思われる。

「一時的なファイルを削除する」をクリックすると、「ディスクに書き込みの準備のできたファイル」は消えるはず。

削除できない。
「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません。フォルダーまたはファイルを閉じてから再実行してください。」
いや他に開いているプログラムなんてないはずだよ。
まだWindows起動直後で何もしてないし。

なぜ消せないのだろう。
「読み取り専用になっている」>なってない。
縮小版のアイコン、クリップボード、キャッシュするアプリケーション、確認したが大丈夫のはず。
何度か再起動を繰り返してその都度削除してみるが、削除できず。
おかしいですねえ。

インデックスと何の関係が?

そもそも、この書き込み準備のできたDATAという隠しフォルダは何だろう。
ユーザープロファイルフォルダの中身の何かだろうか。何かをファイラーで探しているときに、間違えてこれをディスクに書き込むよう操作してしまったのだろうか。

「ディスクに書き込みの準備のできたファイル」のDATAフォルダを右クリックしてプロパティを見てみると、謎が深まる。
場所がH:\Temp_App\Microsoft\Search となっている
これは私の指定したインデックス置場だ。
Windows7標準の検索インデックス機能のデータベース置場は、デフォルトではC:\ProgramData\Microsoft\Search だが、SSDを導入したときにSSDにこういうものを置くのは良くないと思って、Cドライブではなくて、別の劣化の進んだHDDをインデックス置場に設定し直したのだ。

なぜインデックスのデータが書き込み用一時ファイルに入ってるのだろう。
もちろん自分ではそんな操作をした覚えはない。
ユーザープロファイルフォルダの中なら、ファイラーで中を漁っているときに間違って光学メディアに書き込むよう操作することもあり得るかなとは思うが、インデックスなんて自分ではアクセスしないんだから誤操作しようがないのでは?

「ディスクに書き込みの準備のできたファイル」はどこにある?

「ディスクに書き込みの準備のできたファイル」は、標準では
C:\Users\%username%\AppData\Local\Microsoft\Windows\Burn
にある。
一時ファイルを消さない場合、ここにエクスプローラでアクセスして中身を調べれば通常は解決するはず。

ただし、私の場合はやはり場所を移してある。
やっぱしSSDを導入した後に、Cドライブにこういう一時ファイルを置くのはなるべく止めようと思って、標準メディアライティング機能のファイルストックロケーションを移動させていたのだ。
標準メディアライティング機能のファイルストックロケーションは、レジストリ

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

で任意に変更することができる。
「CD Burning」(無ければ「展開可能な文字列値」で「CD Burning」を作成)の値にフルパスを入れればよい。私の場合は、
H:\Temp_App\Microsoft\Burn
に設定していたはず… だった。

改めてレジストリ確認したら違う。
いつの間にか値が、
H:\Temp_App\Microsoft\Search
に書き換わっている。

つまるところ、H:\Temp_App\Microsoft\Searchが、インデックス置場でもあり、かつ書き込み用一時ファイル置場でもある、という状態になっていたわけだ。
そういえばここ数日HDDアクセスが頻繁に起きていて、調べてみるとインデックスが何かしていて、ああインデックスの再構成か何かやってるのかと思っていたが、これが原因だったかもしれない。
なぜレジストリが書き換わってしまったのかは謎。

H:\Temp_App\Microsoft の中身を確認するが、やはり「他のアプリが使用中で…」ということで、中身を手動で削除することはできない。たぶんインデックスサービスが使っているからダメなんだろう。

インデックス置場を別の場所に変更してみたらどうだろう?インデックスが使用中じゃなくなるのでは?と思ったが、なぜかインデックス置場を変更することができない。

次にサービスを停めてみた。

コントロールパネルから「管理ツール」>「サービス」>「Windows Search」を開き、サービスを停止させてみた。
すると、あっけなく書き込み用一時ファイルを削除することができた。

おかげで「ディスクへの書き込みの準備ができたファイルがあります…」も出なくなった。
良かったあ。

なお、構成の都合上、すんなり解決したかのように書いてますが、実際は解決するまで数日かかっております。

再発防止のために

標準メディアライティング機能のファイルストックロケーションの場所を重複しないように直す。

が、よく考えてみると、Windows7の標準メディアライティング機能なんて使ったことあったっけ?
いつもImgburnで焼いてしまうから一度も使ったことがないような気がする。
そう、Windows7の標準メディアライティング機能を無効化するのが一番抜本的な再発防止策ではなかろうか。

ということで、Windows7の標準メディアライティング機能を無効化してしまった。