MFC/API Vistaでアプリのデータを置くべき場所。
Windowsでアプリを作成している場合、フリーソフトの作家さんたちはProgram Filesの直下にデータを保存してきた方も多いと思います。ところがVistaの出現で事情が様変わりしてしまいました。
Program Filesの直下に書こうとしたファイルは、UACのバーチャルストアの機能で別の場所に保存されることになったのです。ちなみに書き込んだファイルの読み出しも自動的に切り替えられます。
[バーチャルストア先]
C:\Users\ユーザー名\AppData\Local\VirtualStore\Program Files\アプリケーション名\
アプリ作成側は意識しなくても良いので楽チンですが実は罠があります。管理者権限でアプリが起動した場合、バーチャルストアの機能がOFFになりProgram Filesの直下にファイルを書き込んでしまうのです。
管理者権限の有無でファイルの読み書きされる場所が変わるため、実にややこしい事がおきます。例えばインストーラから直接起動した場合(管理者権限アリ)とスタートアップから起動した場合(管理者権限なし)でファイルの読み書きする場所が違うのです。
インストーラからの起動時の回避策はややこしいので今は書けませんが、一番良い方法はProgram Filesの直下には書き込むファイルを置かないことです。
って事で、長い前置きでしたがいよいよ本題。
マイクロソフト推奨策としては、LOCAL_APPDATAのパスに作成することです。ここはユーザー毎に作られるフォルダですのでユーザー別のデータを保管することが出来ます。
パスの決め打ちはOSごとに違うので危険ですので、Windows2000以降でしたら下記のプログラムで取得できます。LOCALAPPDATA環境変数などを参照するよりも、この方法がベストだと思います。
| CString m_LocalAppdata; //ユーザー毎のアプリデータのフォルダ // LOCALAPPDATAのフォルダを得る。 |
何かの役に立ったら幸いです。
もし役に立ったら、コメントか拍手をお願いします。
でわでわ。
2008/09/15 | プログラミング | COMMENT(0) | TRACKBACK(0) TOP


![bn_webga[1].gif bn_webga[1].gif](http://blog-imgs-41.fc2.com/s/o/f/softyasu/bw_uploads_bn_webga[1]_1.gif)






