Kei_Watanabeの日記: Windowsフォルダへの書き込みが反映されない? 7
恥を忍んで申し上げますと、弊社製品はいまだにC:\Windowsの直下にフォルダと設定ファイルを配置しています。
Windows95時代の化石のような構成を引きずっており、またユーザー数が極めて限られていて、皆様がサーバー(またはVM)を丸一台弊社製品のためだけに使うという条件を呑んでくださっているためです。
しかし、そんなやり方がいつまでも通用するわけがありません。
ある日、私は怪奇現象を目撃しました。Windows 7での出来事です。
C:\Windows\(myProduct)\以下にテキストファイルを配置して、ここに設定を書くのですが
1. メモ帳を「管理者として実行」して設定ファイルを修正
2. 弊社アプリを実行すると、修正前のパラメータで動作している
3. もう一度メモ帳で開くと、修正後の値になっている
4. コマンドプロンプトでtypeさせると、修正前の値になっている
5. 再起動させてみたが、3,4 の状態は変わらず、アプリは2の動作になる
結局、当該設定ファイルは\Windowsの外に配置できるように、アプリの一部を直して対処したのですが、UACに警告を受けることは当然として、なぜファイルが先祖がえりを起こすのかについては未解明のまま放置されることになりました。
そして私も少しは知恵を付けました。
答えは「VirtualStore」でした。
確かVista以降に付いたもので、Program FilesやWindowsなどの重要なフォルダにファイルを保存しようとするお行儀の悪いアプリについては、
C:\Users\(user)\AppData\Local\VirtualStore\Windows\(myApp)\......
といったフォルダに実際の書き込みを行い、アプリには要望通りのファイルにアクセスしたように見せかける、とても泥縄チックだけど賢い技術です。
かつて問題を起こしたVMのVirtualStoreを覗いてみると…ありました。うちのアプリの設定ファイルが。
メモ帳に対してはWindows以下にあるファイルが修正できたように応答し、ほかのアプリには従来の内容を返していた、ということではないかと勝手に解釈しています。