私がこれを行う方法は、インストーラーの責任にすることです。
VSI 1.1 を使用して、アプリケーションのインストーラ MSI を作成します。CommonAppDataFolder の下にアプリケーション データ フォルダーを作成します。
ビルド後のステップとして、スクリプトを実行して以下を実行します。
- マシンごとのインストール用に MSI データベースを設定します: プロパティ テーブル、ALLUSERS が 1 に設定された行。
- ディレクトリ テーブルで、CommonAppDataFolder のエントリを見つけ、そのディレクトリ インデックスを取得します。このインデックスを使用して、CommonAppDataFolder が親であるエントリのディレクトリ テーブルをクエリし、そのインデックスを取得します (これはアプリ データ サブフォルダです)。
- ファイル テーブルを調べて、プログラムのコンポーネント インデックスを取得します。
- データベースに CreateFolder テーブルが存在しない場合は作成します。そのインデックスによって目的のアプリケーション サブディレクトリの CreateFolder に行を追加し、それをプログラムのコンポーネント インデックスに関連付けます。
- LockPermissions テーブルが存在しない場合は作成します。アプリケーション データ サブディレクトリに新しい LockPermissions 行を挿入し、Everyone に割り当てます
FILE_ALL_ACCESS
。
それはそれについてです。
この方法で行うか、VSI 1.1 を使用してから Orca を使用して MSI を編集するか、おそらくサード パーティの MSI オーサリング ツールを使用して、これらのエントリを GUI 経由で設定し、インストーラ プロジェクトに保存することができます。各 VSI 1.1 ビルドの後に実行する小さな WSH スクリプトを使用するだけです。
私の知る限り、これはWindowsアプリケーションのガイドラインに従って、そのようなことを達成するための推奨される方法です。より手の込んだニーズがある場合は、複数のサブディレクトリまたはサブサブディレクトリを使用して、フル アクセスを許可するもの、読み取り専用のものなどを使用できます。
プログラムは、Shell オートメーション オブジェクトを使用するか、Shell32 を標準 DLL として呼び出す (Declare Function または TLB を使用) ことによって、フォルダーを見つけることができます。