Windows Vista/7 になって、ユーザーのディレクトリがC:\Users下になったり、C:\Users\<ユーザー名>\AddDataなるディレクトリが出来たり、C:\ProgramDataなるディレクトリが出来たり、といろいろな変化があります。
また、C:\Program Filesの下にインストールしたプログラムの設定ファイルを変更すると、C:\Users\<ユーザー名>\AppData\Local\VirtualStore\Program Files\foo\foo.ini などに書かれたりします。
そのような状況で、開発したプログラムをどこにインストールするように設定すればいいのか、Windowsの流儀が分からず、調べてみると、"Namespace Usage Guidelines for the Window Vista File System"という技術文書に行き当たりました。
アプリケーション開発者向けに、アプリケーション管理データ、ユーザーデータ(ユーザー固有・ユーザー間で共有)、コンピュータ間で共有データ、などの配置についてのガイドラインが掲載されています。
ガイドライン抜粋
Program Files、ユーザー固有・アプリケーション共有データ
- C:\Program Files:
- プログラム、ソフトウェアコンポーネント置き場
- 通常ユーザーはこの場所に書き込み権を持たないため、ユーザーデータやアプリケーションデータはここへ置くべきでない。
- C:\ProgramData:
- コンピューター上のすべてのユーザーが共有するアプリケーションデータ置き場
- C:\Users\<ユーザー名>\AppData:
- ユーザー固有のアプリケーションデータ置き場
- AppData以下はさらに階層構造を持つ
- C:\Uses\<ユーザー名>\AppData\Roaming
- コンピュータに依存しないユーザー固有のアプリケーションデータ置き場
- アプリケーションデータのうち、ユーザーカスタマイズ情報などで、ユーザーの操作を伴い変更するもの
- C:\Uses\<ユーザー名>\AppData\Local
- このコンピュータに固有のユーザー固有のアプリケーションデータ置き場
- アプリケーションデータのうち、一時的で破棄されてもアプリケーション動作に支障のないもの(ログ、デバッグ情報など)
- コンピュータに依存しないユーザー固有のアプリケーションデータでも、ユーザーの操作なしに再生成できるデータ(ユーザーが作成するカスタマイズ情報や設定情報は含まない)
- C:\Users\<ユーザー名>\AppData\LocalLow
- ユーザー固有の特権(管理者権限)なしに扱えるアプリケーションデータ
ProgramDataおよびAppDataのサブフォルダ生成規約
- ベンダー名+製品代表名(推奨)
- 必要があれば、製品内訳名(オプション)
推奨しない使い方
- C:\Users\<ユーザー名>直下にファイルを置かない。サブフォルダを作り、その中にファイルを入れる
- システムドライブのルート直下にファイルやフォルダを作らない。
フォルダの移動
アプリケーションは、ユーザーがフォルダーを移動してもよいように備える。移動可能なフォルダーはWell Known Folderと呼ばれ、フォルダーの位置は、Known Folder APIで取得できる。
また、APIが利用できない場合に、環境変数が用意されている
環境変数名 | 場所の例 |
---|---|
%USERPROFILE% | C:\Users\<ユーザー名>\ |
%APPDATA% | C:\Users\<ユーザー名>\AppData\Roaming |
%TEMP% | C:\Users\<ユーザー名>\AppData\Local\Temp |
%LOCALAPPDATA% | C:\Users\<ユーザー名>\AppData\Local |
%PUBLIC% | C:\Users\Public |
%PROGRAMDATA% | C:\ProgramData |