Virtual Store

仮想店舗ではない。Virtual StoreはWindows Vistaにおけるストレージ仮想化の実装だ。

Windows Vista のファイルおよびレジストリの仮想化に関する一般的な問題

Windows2000やXPのアプリケーションではProgram FilesフォルダやWindowsフォルダ配下に設定を保存するアプリケーションが普通に存在したものだが、Windows Vistaではユーザ権限管理の強化とUACによりそのような処理は実行できなくなった。
そのようなアプリケーションはWindows Vista未対応のアプリということになるが、それだけの理由でVista上で動作しなくなってしまうのはまずいってことで設けられた互換性維持機能がVirtual Storeだ。
上記のようなWindows Vista未対応アプリはProgram Filesのように保護されたフォルダにファイルを保存しようとすると、目的のフォルダではなくVirtual Storeと呼ばれる別のフォルダにファイルが保存され、以後、同じファイルを開こうとしたときにはVirtual Store側にあるファイルが開かれる仕組みになっている。

Virtual Storeは以下のパスにマップされる。

C:\Users\{username}\AppData\Local\Virtual Store

先日、Swingアプリケーション用フレームワークのロガーをjava.util.loggingからlog4jに変えたのだが、その際アプリケーションをJava Web Startのコンテキストで実行するとFileAppenderで指定したはずのログファイルがどこに作られたのか全く解らなくなったが、調べてみるとこれもVirtual Storeの対象になっていた。

ログファイルが出来ると期待したパス

C:\Users\{username}\AppData\Roaming\log\application.log  

Virtual Storeにより上記のパスが実際にマッピングされたパス

C:\Users\{username}\AppData\Local\VirtualStore\Windows\System32\log\application.log

Virtual Storeへマップされるのは良いのだが、どうしてパスに\Windows\System32っていう尾ひれが付くんだろう。
なお、Windows Vistaの場合、アプリケーションログファイルなどを配置するのに最も推奨されているパスは何処を指すべきなのだろう。やはりユーザのホームディレクトリ※が良いのだろうか。

※System.getProperty("user.home")で取得できるパス。