スペースモラトリアムノカミサマ

日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)

最近の TrackBack:
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|06|07|08|09|10|
2011|01|02|03|07|10|11|
2012|02|03|04|07|08|09|
2013|01|06|07|
2014|02|08|09|11|
2015|09|
2016|01|05|
2017|07|
2018|05|07|

2007/03/04

_ [] Windows Vista のビミョーな互換性の無さに苦戦中

先週から職場で人柱として Windows Vista 端末に移行してるんですが… XP との間のビミョーな互換性の無さに泣かされています。

最も泣かされているのは IP Messenger でメンバー一覧が出ないこと。とても困ってます。どうしたらいいですか…。(【後日追記】Broadcast アドレスを手動で設定することで対処療法的に回避できた)

次に泣かされたのは Program Files フォルダ仮想化まわり。

Windows Vista RC2 へ対応状況の調査結果によれば、

Windows Vistaには、\Program Files下のカレントディレクトリにデータファイルを保存しようとする場合に、「リダイレクトする機能」があります。

バーチャル ストアと名付けられたこの仕組みですが、どうやらこんな仕組みになっているようです。

例えば、C:\Program Files\xxxx というフォルダにインストールされたアプリケーションが、自身のカレントディレクトリにある yyyy.ini へ書き込みを行うとします。この時、書き込みは全て、C:\Users\[ユーザー名]\AppData\Local\VirtualStore\Program Files\xxxx\yyyy.ini に対して行われます(=リダイレクトされます)。これについては、WritePrivateProfile〜系のAPIを使っていても、CreateFile系のAPIを使っていても、CRT系の関数を使っていても、行われるようです。

動きを調べてみると、なかなか面白い動きをしてくれます。

  • ファイルから単に読み込むだけならば、\Program Files\xxxx\yyyy.ini からの読込みが行われます。
  • ファイルへの書き込みが初めて発生するとき、 〜\VirtualStore\Program Files\xxxx\yyyy.ini が作られます。
  • 〜\VirtualStore\Program Files\xxxx\yyyy.ini が初めて作られるとき、\Program Files\xxxx\yyyy.ini が存在していれば、コピーが行われます。
  • 〜\VirtualStore\Program Files\xxxx\yyyy.ini が存在しているときは、\Program Files\xxxx\yyyy.ini への読み書き要求は全て、〜\VirtualStore\Program Files\xxxx\yyyy.ini に対するものとして解釈されます。

[Windows Vista RC2 へ対応状況の調査結果より引用]

ということで、通常使用するユーザには \Program Files 配下への書き込みを一切禁止しつつ、HKCU や %APPDATA% 以外の場所に設定情報等を保存してしまう古いお行儀の良くないアプリケーションもなんとか動かす工夫がされているようなのですが。

自分の場合、これまで Becky! のメールボックスをプログラムと同じ C:\Program Files\Becky! に入れて使っていたので、Vista でも同様に旧環境からそのままコピーして使用し始めてみたら、このフォルダ仮想化の仕組みのおかげでほぼ全てのメールボックスが VirtualStore 配下にコピーされ、ディスク消費量が倍増。しかも、この仮想化が微妙に不完全っぽく、「旧環境からコピーしてきたはずのメールが消えた (ように見える)」「さっき受信したはずのメールが消えた (ように見える)」ような状態が発生して一時混乱。

原因を突き止めた後は、本物と VirtualStore 配下のデータを手動でマージして、データだけ %APPDATA% 配下に移動して今は正常に利用できてますが…。

もう「プログラムと設定とデータが同一フォルダで分かり易い運用」の時代は終わったのか…。というかそういうことがしたければ \Program Files じゃなくて %USERPROFILE% 配下でやれってことなんでしょうね。

その他、コマンドプロンプトにファイルやフォルダをドラッグ&ドロップした時にそのパスが貼り付けられなくなったのも痛い。それに頼った運用をしてきてるスクリプトが色々あったのに、これからどうしたらいいですか…。

マウスポインタが数秒間動かなくなる症状がたびたび発生するのも勘弁してください…。