セットアッププロジェクトで(Local Settings\Application Data\)LocalAppDataFolderにファイルを配置する

インストーラ作成でのオハナシ.
VisualStudio2005でセットアッププロジェクトを作成し,アプリケーションで使用する(ユーザ毎の)設定ファイルをインストール時に配備することを考える.
この場合,ユーザ別設定ファイルはユーザ毎に配置したいので,置き場所としては下記の2つが候補になる.

  • アプリケーションデータフォルダ(ローミングあり)
    • System.Environment.SpecialFolder.ApplicationDataに相当
    • パス例 C:\Documents and Settings\[ユーザ名]\Application Data配下
  • アプリケーションデータフォルダ(ローミングなし)
    • System.Environment.SpecialFolder.LocalApplicationDataに相当
    • パス例 C:\Documents and Settings\[ユーザ名]\Local Settings\Application Data配下

※両者の違いはhttp://www.atmarkit.co.jp/fdotnet/dotnettips/263apppath/apppath.htmlを参照.


で問題なのは,このフォルダを指定しその下に特定のファイルを置く方法.


セットアップ時にファイルの配置を指定するには,セットアッププロジェクトのファイルシステムタブ(プロジェクト名右クリック→表示→「ファイルシステム」)を使う.
デフォルトでは,上記いずれも左側のフォルダ一覧にはないので追加してやるのだが,右クリック→「特別なフォルダの追加」ってやると,「アプリケーションデータフォルダ」ってのは一つしかない.
でもってこれは,ローミングありのやつ(C:\Documents and Settings\[ユーザ名]\Application Data のほう)になっている.
じゃあ,ローミングなし版(C:\Documents and Settings\[ユーザ名]\Local Settings\Application Data)はどうするか?


しょうがないので右クリック→「特別なフォルダの追加」→「カスタムフォルダ」ってのを選択する。
すると新しいフォルダが作成される.じゃあこいつのパスをどう設定するかだが,プロパティ欄を見てみると,さっきのシステムフォルダとはちょっと違ってて,DefaultLocation なんて項目ができてる.
VisualStudioのヘルプによるとココにWindows インストーラがサポートしているシステム フォルダ プロパティ名を入れるものらしい.
でもって,今回使いたいアプリケーションデータフォルダ(ローミングなし)のプロパティ名は「LocalAppDataFolder」らしいのだけど,プルダウンに入っていないので(ナンデダヨ…),「[LocalAppDataFolder]」と直接入力してやる.(カギ括弧もつける)
んで,ちゃんと今作ったフォルダの下にサブフォルダ作って,配置したいファイルを指定し,プロジェクトビルドしてインストーラーを動かしてみると,ちゃんとC:\Documents and Settings\[ユーザ名]\Local Settings\Application Dataの下に置きたいものが置かれるようになる.


ちなみに,システム フォルダ プロパティ名の一覧は下記の通り.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/system_folder_properties.asp