スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/-- | スポンサー広告  TOP

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のフォルダを得る。
TCHAR szLocalAppdata[MAX_PATH];
if( SUCCEEDED(SHGetFolderPath(NULL,CSIDL_LOCAL_APPDATA,NULL,0 szLocalAppdata)) ) {
 // 成功したらパスを保存する。
 m_LocalAppdata = szLocalAppdata;
} else {
 // 失敗したのでエラー処理
}

後は、このフォルダの中にメーカー名(作者名)フォルダを作って、更にその中にアプリ名のフォルダを置いてデータをその中に保存します。

何かの役に立ったら幸いです。
もし役に立ったら、コメントか拍手をお願いします。
でわでわ。

2008/09/15 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

コメント

コメントの投稿



管理者にだけ表示を許可する

 | BLOG TOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。