てきとうなさいと べぇたばん

VirtualStoreによって、ファイルパスが変わっている可能性がある

古いプログラムを動かすためのVirtualStore

VirtualStoreという仕組みによって、ちょっとデータの引き継ぎでハマった話を掘り下げてみる。

Windows XPまでの時代のプログラム

プログラムファイルが格納されている(通常なら)C:\\Program Filesというディレクトリに、プログラムが作ったデータを書き込むのはWindows XP時代では普通に行われた事のようだ。

しかし、元々は実行するために必要なプログラムを格納するディレクトリである。そこにプログラム自身がデータを書き込むのはあまり行儀がよいとは言えないらしい。多分、以下の理由だろうか。

  • 重要なシステムが入っているディレクトリに誰でも書き込めるのは不正なプログラムの侵入を許すことになる
  • Program Filesにセーブデータが入っていると、ユーザー全員が参照するディレクトリのため、ユーザーごとのセーブデータを管理できない

ネットを漁ると、このような重要なディレクトリにデータを書き込むプログラムは、「お行儀の悪い」プログラムという名称が付けられているように見える(そのプログラムの組み方の問題で、そのプログラム自体の質のことを言っているわけではないし、そのプログラムを否定するつもりもない)。

Windows Vista以降でどうなったのか

Windows Vista以降では、UAC(ユーザーアカウント制御)によってシステムディレクトリはユーザーが許可をして管理者権限で動かせるようにしないといけないため、Program Filesへの書き込みが難しくなった。

つまり、お行儀の悪いプログラムは、無闇矢鱈にデータをProgram Files以下へ書き込むことができなくなってしまったということである。

それじゃお行儀の悪いプログラムは動かせないのか

しかし、それではお行儀の悪いプログラムは動かせなくなってしまうので、そうしたお行儀の悪いプログラムを動かせるようにする必要がある。その救済措置として、「VirtualStore」という仕組みで回避している。

VirtualStoreとは

VirtualStoreは以下のディレクトリにある。AppDataは隠しディレクトリなので注意。

C:\\Users\\ユーザー名\\AppData\\Local\\VirtualStore\\

このディレクトリは、本来Program Filesに書き込むファイルをWindowsがこのディレクトリ以下に書き込むように変更してしまう。

こうすることで、お行儀の悪いプログラムをWindows Vista以降でもお行儀の良いプログラムとして動かすことが可能になる(ただし、お行儀の悪い方法でプログラムを新規に組むのはよろしくないとは思うので新しく正しい方法にするべきだとは思うけど)。

参考サイトなど

正直、Windowsに詳しくはないので、これでいいのか…という困惑はあるのです。以下のURLを参考にしました。というか、以下のURLのほうがよっぽど正確な記事だと思います。