Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2017年03月26日] [更新 2017年03月26日] Delphi 一般・その他
   
アプリケーション固有のデータの置き場所
動作確認等 Windows Vista 以降
[整理番号 - 336]







アプリケーション固有のデータの置き場所


当サイトで提供しているサンプルプログラムは,設定関係のファイルを EXE ファイルと同じ階層かその上の階層に置いています.一方,環境変数 %ProgramFiles% が示すフォルダ内にプログラム本体を置くアプリケーションでは,そのアプリケーション固有のデータは,基本的にガイドラインに従った場所に置くことになります.

Windows XP までは,アプリの実行ファイル,その関係ファイルも %ProgramFiles% フォルダ内に置いているアプリケーションが多くありました.Windows Vista では,%ProgramFiles% フォルダ内のファイルの更新は管理者権限が必要となり,アプリの設定ファイル等を置いておくとトラブルの原因となる可能性があります.

アプリケーション固有のデータは,基本的に環境変数 %APPDATA% が示すフォルダの階層下に置くことになります.環境変数が示す実際のパス名は,以下に示すように,Windows XP と Windows Vista では異なっています.環境変数が用意されているフォルダの指定は,Windows のバージョンが違っても動作するように実パスではなく,環境変数を使用すべきです.



リスト1
環境変数の実パスが Windows のバージョンよって違う例.%LOCALAPPDATA% と %APPDATA%
Windows XP
  C:\Documents and Settings\ユーザー名\Local Settings\Application Data
  C:\Documents and Settings\ユーザー名\Application Data

Windows Vista
  C:\Users\ユーザー名\AppData\Local
  C:\Users\ユーザー名\AppData\Roaming



下表は,環境変数 %APPDATA% に関係したフォルダの一覧です.
全て AppData フォルダの階層下にあります.この AppData フォルダは隠し属性になっています.エクスプローラでツリー構造を展開して表示する場合は,[フォルダオプション] のダイアログで隠し属性のファイルも表示するようにしないと表示されません.
[フォルダオプション] のダイアログは,以下のコマンドで起動できます.


rundll32.exe shell32.dll,Options_RunDLL 7


アプリケーションのデータ関係のファイルは,これらのフォルダ直下には置かないようにします.
[アプリ名] あるいは [ベンダー名+製品名] (推奨) 等のフォルダを作成し,それらのフォルダ内に保存するようにします.%ProgramFiles% 内に置くアプリケーションのファイルも同じようにします.



表1
Windows 7 の AppData フォルダの構成.AppData フォルダは隠し属性

AppData 階層下フォルダ 機能
Local PC に固有と PC ユーザのアプリのデータ
環境変数は %LOCALAPPDATA%
LocalLow セキュリティの強化が必要な PC 固有と PC ユーザのアプリのデータ
代表的なアプリは Internet Explorer
該当レジストリは HKCU\Software\AppDataLow
Roaming ユーザ固有のアプリのデータ置き場所
ユーザの操作に伴い変更されるアプリのカスタマイズ情報など
Delphi 関係の設定もここにある (\Embarcadero\BDS 等)
環境変数は %APPDATA%
Local\Temp アプリで一時的に使用するファイルの置き場所 (テンポラリフォルダ)
アプリ終了後には削除されても構わないファイルの置き場所
環境変数は %TEMP%


関係するフォルダとして以下のようなものがあります.

Delphi のサンプルコードは,全てのユーザを対象にしてインストールした場合,Windows 7 では [ユーザー] [パブリック] [パブリックのドキュメント] の階層下にあります.
このフォルダの実パス名は Windows 7 では [C:\Users\Public\Documents] です.Delphi のフォルダには,サンプルコード以外のファイルもあります.



Windows 7 のフォルダ名 機能
ProgramData PC 共通のアプリ用データの置き場所で,仮想化の対象となる
読み出しだけであれば問題ない
環境変数は %PROGRAMDATA%
パブリック 全てのユーザからアクセス可能なファイル類の置き場所
環境変数は %PUBLIC%


[備考]
アプリケーションの実行ファイルを %ProgramFiles% フォルダ内に置かない場合でも,アプリケーション関係のデータを %APPDATA% 階層下に保存した場合は,そのアプリケーションが不要になった時に削除するような機能があると便利です.




特殊フォルダを表す環境変数とその場所


環境変数の内,上記と関係した特殊フォルダの実際のパス名です.これらのフォルダは,エクスプローラのアドレス欄に環境変数を入力して表示することができます.エクスプローラのアドレス欄に直接入力した場合は,隠し属性のファイルも表示できます ([フォルダオプション] で隠し属性のファイルも表示するように設定している場合).
下表のパス名は,Windows 7 で,環境変数 %SystemDrive% が C: の時の値です.



表2
環境変数とそのパス名

環境変数 Windows 7 における場所 (システムドライブが C: の場合)
%SystemDrive% システムドライブ.多くの場合 C:
%ProgramFiles% C:\Program Files
C:\Program Files (x86) (64 ビット Windows の 32 ビットアプリ用)
%LOCALAPPDATA% C:\Users\ユーザ名\AppData\Local
%APPDATA% C:\Users\ユーザ名\AppData\Roaming
%TEMP% C:\Users\ユーザ名\AppData\Local\Temp
%PROGRAMDATA% C:\ProgramData
%USERPROFILE% C:\Users\ユーザ名
%PUBLIC% C:\Users\Public