知り合いが何か悩んでいたらしいネタなので、取り敢えずメモ。
アプリがVista以降のWindows上で動作する場合、UAC絡みもありファイルアクセスがシステム側によって強制的にリダイレクトされる状況がしばしば発生する。
そこで気をつけないといけないのが、リダイレクト先やアクセス先が、各種条件によって複数に分かれるということ。これとか。
¥User¥ユーザ名¥AppData¥Local¥VirtualStore 以下
¥User¥ユーザ名¥AppData¥Local¥Roaming 以下
まあ、これは32bit版でも64bit版でも共通だから良いとして。
64bit版OS上で32bit版プログラムを動かす時は、レジストリアクセスがリダイレクトされることもお忘れなく。
プログラム側で開く→実際のアクセス場所で、こんな風に。
HKEY_LOCAL_MACHINE¥SOFTWARE
→HKEY_LOCAL_MACHINE¥SOFTWARE¥WoW6432Node
32bitモノは引っ込んでろとばかり一段下にまとめられてしまいます、えぇ。
更に、システムフォルダについても64bit版には一部ハードリンクが存在するんですな。
ハードリンク元 → ハードリンク先、と書くと。
¥Windows¥SysWOW64
→ ¥Windows¥System32
要するに、SysWOW64内のファイルはSystem32 というPathでも見える、見えてしまうということ。
◇
まぁこんなこと、かなりシステム側に近いプログラムを相手にする場面でしか役に立たない知識だし、そういう情報が必要な人なら大抵はとっくに常識だろうが。
古いソフトでは時々あるんですよ、この辺りのリダイレクトが原因で動かないって話が。
何しろOS側が2000~2003/XPと殆ど変わらないまま長い間続いてしまったこともあり、この辺りのリダイレクトの存在を全く考慮しないままPath等を決め打ちにしている、ソースの中で直書きしている、そんな「ダメプログラム」が未だに結構存在して、しかもあちこちで動いているようなんですよ、これが。
折角下逸が「SDK的に正しいアクセスをしていれば自動的にリダイレクトされて、アプリ側はそのことを意識する必要もない」ように、色々と面倒な仕掛けを仕込んでいるのに、ねぇ。
やれやれと言うか、何と言いますかね。