インフラしむらのイベントログ -6ページ目

Windows 7 の互換性検証(UAC互換:ファイルの仮想化:VirtualStore)

以前 Windows 7 アプリケーションの互換性を検証しました。
噛み砕いて言うならば、
現行(Windows XP、Vista)で使用しているアプリケーションが、
Windows 7 に移行したあとでも正常に起動できるのか。

といっても、何をもって「正常に動作」と言うのかは難しいです。
「エラーや警告が出ていても、起動できて使えればOK」や
「エラーはダメだけど警告はOK」とか…
個人差のレベルだと思いますけど…。

今回は「使えればなんでもいい」と実にシンプル。
こーゆー考え、大好きですw
まぁエラーの無いシステムってのも完璧で好きですけど、
やっぱり使えれば良いという需要が圧倒的に多いようですね。

と、言うことで早速調査へ。

Windows 7 アプリケーションの互換性については、Microsoft も情報を提供してくれています。
- Windows 7 互換性情報 ------------------------------
----------------------------------------------------

うーん、難しい。
ただ一般的な問題ってのがあるんですね。
ありがたや (ー人ー)

- 3. 一般的な互換性問題 ------------------------------

3.1 非公開情報に依存しない
3.2 OS のバージョン チェック
3.3 ファイルやフォルダ パスの取得
3.4 ファイルへの署名
3.5 x64 バージョンのサポート
----------------------------------------------------

で、これに該当しない場合は他が原因…と。

- 4. 新機能や機能変更に伴う互換性問題 ----------------

4.1 リソースの管理
4.2 整合性レベル (IL) によるオブジェクトへのアクセス制御
4.3 ユーザー アカウント制御 (UAC: User Account Control)
4.4 ユーザー インターフェイス特権の分離 (UIPI)
4.5 Internet Explorer のセキュリティ機能
4.6 Windows リソース保護 (WRP)
4.7 セッション 0 の分離
4.8 ファイル マッピング オブジェクト
4.9 新フォント環境
4.10 プログラムの互換性アシスタント(PCA)
4.11 Internet Explorer 8 の標準準拠
4.12 DEP/NX の既定値
4.13 Windows メールの削除
4.14 容易な High DPI 設定
4.15 長音表記の変更
---------------------------------------------------

うーん…これだけの情報があるのは良いことですが
アプリの仕様が把握できていないので
やっぱり動作を見てみないことには…・。


ちなみに、今回のアプリケーションは以下のようなモノでした。

- アプリの仕様 ------------------------------------
・動作概要 : サーバーと通信をし、情報を表示するアプリ
・インストール先 : C:\Program Files 内に格納
・設定ファイル : C:\Windows 内に格納
・権限 : 標準ユーザーの権限で起動させたい
--------------------------------------------------

とりあえず、ポチッとな!(起動)
まずは UAC が動作してダイアログが表示されました。
Windows Vista 以降、セキュリティを高くする目的で
Program Files など特定のフォルダーへのアクセスする場合は、
UAC が働き、ダイアログが表示されるようになりました。

UAC のダイアログで [OK] を選択。
そして、エラー…。
起動失敗…。

むむむ…。


じゃ次は [管理者として実行] を選択してみます。


起動成功。


ちなみに今回、動作確認した環境は、お客様の環境に合わせて
C ドライブに Windows 係のファイルを格納。
D ドライブにユーザー領域 (マイドキュメントなど) を格納。
※ ユーザープロファイルもレジストリにて、D ドライブに移動済み。


この環境に依存してるのかなぁ。

そんな思いで、自分のマシン (C ドライブのみの環境) で
Administrators グループに所属しているユーザ-で実行。


ポチッとな!(起動)
先ほどと同様、UAC が動作してダイアログが表示。
UAC のダイアログで [OK] を選択。
そして、起動…。

起動?!
できちゃったw

じゃ [管理者として実行] はどうかな?
クリクリッとポチッとな!(管理者として実行で起動)
UAC のダイアログが表示されずに、起動…。

環境依存ほぼ確定。

そこで先ほどの資料を読み漁り、検証した結果、
Windows 7 では、既存のアプリが標準ユーザーで動作できるように
フォルダーの仮想化が行われることが判明。

詳細は下記に記載されてます。
- Windows 7 での既存アプリケーションへの対応 ----------
----------------------------------------------------

この機能を「ファイルの仮想化 (VirtualStore)」といい、結構優れた機能です。

アプリが C:\Program Files フォルダーや C:\Windows フォルダーに
アクセスする場合、標準ユーザーの権限ではアクセスができません。
そこで %LocalAppData%\VirtualStore 内に Program Files フォルダーを
仮想的に作成し、アクセスさせるというものです。

つまり、アプリが C:\Program Files フォルダーにアクセスしたら
%LocalAppData%\VirtualStore\Program Files フォルダーが自動的に作成され
仮想的にやり取りがされます。
%LocalAppData% はユーザーが自由にアクセスできる領域なので、
アクセス権に関する問題は発生しません。

この機能が有効になったフォルダーには [互換性ファイル] ボタンが表示され
クリックすることで仮想化先を表示することができます。

これで既存アプリも改修する手間を省ける可能性があるのです。
※ レジストリも仮想化可能です。
そしてどうやらこの機能がお客様環境では正常に動作していなかったようです。


この情報を基に、Microsoft に問い合わせてみると、
C ドライブ以外にユーザープロファイルを移した場合、
(今回は D ドライブ)
Virtual Store が正常に動作しないようです。
製品の制限 (バグ) ですね。

しかし、ユーザープロファイルを C ドライブ以外に移動させる場合に、
レジストリを直接いじってしまっているのでサポート対象外とも言われました。


結局、原因は分かりましたが、対策が立てられなくて残念でした。
暫定的な対策は [管理者として実行] のみ…。


便利な VirtualStore ですが、こんなバグがあるのはもったいないですね。
もう少し融通の利く機能ならば、様々なケースで利用できるんですけど。


フリーのインフラ SE の皆様、SYNAPSE で案件に就きませんか。
当サービスのメディエイターが、皆様のニーズを最優先に考え、
最適な案件をご提案させていただきます!
↓↓↓
━━━━━━……………‥‥‥‥‥‥‥‥‥‥‥‥

案件提案型フリーエンジニア支援サービス『SYNAPSE』
http://www.neuron-network.co.jp/fe-synapse/

‥‥‥‥……………━━━━━━━━━━━━━━