NonSoft

ファイル仮想化(VirtualStore)のトラブル対応
(Windows8/Windows7/Vista)


 ち〜な〜み〜に〜
Windous Vista(Windows 7)で導入されているファイル(フォルダ)の仮想化(VirtualStore)ですが、
いろんな問題が発生しプログラマーにとってもエンドユーザーとっても迷惑な存在かもしれません。

この仮想化(VirtualStore)は本来の目的からすれば、
セキュリティ的に弱かったWindowsを頑強にしたいという思いで考え出されてものだと思いますが、
なかなか馴染めない存在で、トラブル(不具合)の原因になる事が多いです。

VirtualStoreとは?、どんな事が起こるのか?、対応策(解決策)などを以下に紹介したいと思います。


1.仮想化フォルダ(VirtualStore)とは?
VirtualStoreとは、アプリケーション(ソフトウェア/プログラム)からWindowsシステムフォルダに
ファイル作成(上書き保存)しようとすると、実際は別のフォルダに出力されるという機能です。
アプリケーションが意識していない場所(VirtualStore)に勝手に出力されてしまう機能です。
※WindowsシステムフォルダとはC:\WindowsやC:\Program Filesを意味しています。

OS(Windows)が勝手に仮想化フォルダ(VirtualStore)にファイル出力してしまう条件は、
そのアプリケーションが[管理者として実行]されていない時(セキュリティ権限が弱い時)です。
怪しいアプリケーションに大事なシステムフォルダを触らせたくないという事だと思います。

Windowsシステムフォルダに対応する仮想フォルダ(VirtualStore)のPATHは次の通り決まっています。
ファイル出力したいフォルダPATH 実際にファイル出力される仮想化フォルダPATH
C:\Program Files
(環境変数:%ProgramFiles%)
%LOCALAPPDATA%\VirtualStore\Program Files
C:\ProgramData
(環境変数:%ProgramData%)
%LOCALAPPDATA%\VirtualStore\ProgramData
C:\Windows
(環境変数:%SystemRoot%)
%LOCALAPPDATA%\VirtualStore\Windows
※[%LOCALAPPDATA%]のPATHは[C:\Users\<UserName>\AppData\Local]です。 ※<UserName>はログインユーザーの名前(ID)です。 (注意)フォルダ以外に一部のレジストリ操作に対しても仮想化(VirtualStore)が発生します。 2.仮想化フォルダ(VirtualStore)によって発生するトラブル(問題) 仮想化フォルダ(VirtualStore)が有効な時に、次のようなトラブル(問題)が発生する事があります。 (1)WindowsXPで動いていたアプリケーションがWindows8/Windows7(Vista)で動かない WindowsXPで動いていたアプリケーションがWindows8/Windows7(Vista)では動かない事があります。 その原因が仮想化フォルダ(VirtualStore)である場合は、 そのアプリケーションを[管理者として実行]するか、 Windowsシステムフォルダ(C:\WindowsやC:\Program Files)以外の場所で実行する事で、 VirtualStoreの影響を受けず正常動作する事があります。 (2)[管理者として実行]した時と[管理者として実行]しない時でファイル入出力のPATHが異なる [管理者として実行]されていないアプリケーションは仮想化フォルダ(VirtualStore)が使用されますが、 [管理者として実行]されているアプリケーションは仮想化フォルダ(VirtualStore)が使用されません。 つまり、管理者であるかどうかによってファイル入出力のPATHが異なる事になり、 アプリケーションの実行ユーザや実行方法によりファイル不整合が発生する事があります。 (3)ファイル出力エラーになるファイル拡張子がある 仮想化フォルダ(VirtualStore)には、拡張子が[.bat]や[.exe]のファイルが作成出来ません。 (未確認ですが拡張子が[.sys]や[.dll]のファイルも同様だと思います) これらの拡張子のファイルを出力すると[アクセスが拒否されました]というメッセージの エラー(例外)が発生します。 この事実は、自作プログラムのデバッグ時に他の拡張子(.txtや.dat)で動作確認しても、 実際の運用時に他の拡張子で正常動作しない(テスト時に気付かない)という事になり、 この事実を知っているかどうかは、プログラマーにとって重要だと思います。 (4)アプリケーションをアップグレードすると動かない 古いバージョンのアプリケーションをアンインストールして、 新しいバージョンのアプリケーションをインストールしても、 仮想化フォルダ(VirtualStore)には古いバージョンのデータが残っていて、 新しいバージョンのアプリケーションが動かない事があります。 新しいバージョンのアプリケーションを起動する前に、 古いバージョンのデータを手動で削除する等の対応が必要です。 3.仮想化フォルダ(VirtualStore)を無効にする VirtualStore関係のトラブル(問題)を避ける一番簡単な方法はVirtualStoreを無効にする事です。 仮想化フォルダ(VirtualStore)を無効にする方法には次のような方法があります。 (1)対象のアプリケーションを[管理者として実行]する。   (方法1)実行するEXEファイルをマウス右クリックして[管理者として実行する]を選択する。   (方法2)実行するEXEファイルをマウス右クリックで[プロパティ]を表示し、       [互換性]の[特権レベル]の[管理者としてこのプログラムを実行する]をチェックする。 (2)UAC(ユーザーアカウント制御)を無効にする。   (Windows8/Windows7の場合)   [スタート]→[コントロールパネル]→[ユーザーアカウントと家族のための安全設定]→   [ユーザーアカウント]→[ユーザーアカウント制御設定の変更]を[通知しない]まで下げる。   (WindowsVistaの場合)   [ユーザーアカウント制御(UAC)を使ってコンピュータの保護に役立たせる]のチェックを外す。 (3)仮想化フォルダ(VirtualStore)用のレジストリを編集する キー :[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] DWORD値:[EnableVirtualization]=(1:有効、0:無効)