Windowsのユーザーアカウント制御(UAC)によるVirtualStoreについて


現在ではだいぶWindows 7が普及しているので、ご存知の方も多いと思いますが、本日は上記について書きます。

皆さんこのような経験は無いでしょうか。

                                                    • -

Windows XPで動いていたアプリケーションを、Windows Vista/7のProgram Files下にインストールし、一般ユーザ権限で動かす。
アプリケーションが設定ファイルに正しい値を書き込んでいるか、Program Filesの下にあるものを開いて確認してみたが、書き込みがされていない。
ただしアプリケーションは正しく動いている。

                                                    • -

実は設定ファイルは知らずのうちに以下の場所(VirtualStore)にコピーされ、アプリケーションはこれを参照していたりします。
C:\Users\(ユーザー名)\AppData\Local\VirtualStore\Program Files\(製品名)\

これはWindows Vista以降のユーザーアカウント制御(UAC)により発生します。
Windowsが「管理者権限でない時は、Program Filesの下に直接書き込むのはセキュリティ上よくない」ということで、勝手にこのようなこと(仮想化)をしているようです。

この対策には、UACを無効にしたり、アプリケーションを管理者として実行する等、いくつか方法があるようですが、まず考えられるのが、設定ファイルの保存先をUACの影響を受けない場所に変えることだと思います。

VB.NETでは、例えばApplicationクラスのUserAppDataPathプロパティが以下のようなパスを返しますので、ここを利用するのもよいのではないかと思います。
C:\Users\(ユーザー名)\AppData\Roaming\(会社名)\(製品名)\(バージョン)\
※(会社名)以下はアセンブリ情報のもの

ただしアプリケーションのバージョンを変えると、このパスも変わってしまい、これまでの設定ファイルの情報が反映されなくなってしまうということが起きますので、そこは何かしらの工夫が必要になりそうです。

その工夫も含め、VirtualStoreについて検索すると、たくさん情報が出てくるようですので、一度ご覧になるのもよいかと思います。

ちなみに、弊社がVB.NETで作成したソフトウェアには、次の様なものがあります。
・漢文作成システム : http://msystm.co.jp/user_kyoiku.html
・売上データ自動作成システム : http://msystm.co.jp/user_bunka1.html
・経営診断データ自動作成システム : http://msystm.co.jp/mecs_top.html

その他システムに関しては、弊社ホームページをご覧下さい。
弊社サイト : http://msystm.co.jp/