私の質問の概要:
VS2010 の Windows セットアップ プロジェクトのレジストリ画面で、独自のカスタム変数 ([TARGETDIR] を使用できる方法) を使用することはできますか? 具体的には、インストール ユーザーが管理者権限を持たずに COM オブジェクトをマシンに登録するために、アセンブリの厳密な名前とアセンブリ バージョンをレジストリに保存する必要があります。
私はすでにカスタム アクションを使用してみましたが、できればその道を進みたくありません。
詳細と、私が試したことは次のとおりです。
最近、私の雇用主は、すべての従業員の管理者権限を自分のマシンからやみくもに削除し始めました。
いくつかのワークステーションで使用していた COM 公開 C# クラスを作成しましたが、HKEY_CLASSES_ROOT の下に適切なアクセス許可がなくなったため、登録できなくなりました。
グーグルを通じて、HKCU* の下に適切なキーをすべて登録する方法を見つけましたが、これを展開プロジェクトに実装したいと考えています。
Windows セットアップでレジストリ画面を使用する方法は理解していますが、保存する必要があるカスタム キー/値があります (インストール フォルダー、アセンブリの厳密な名前、バージョン)。
カスタム アクションを使用することもできますが、(a) アンインストール時にすべての適切なキー/値を自動的に削除するよりも優れているため、(b) インストール中にレジストリが変更されるため、Windows セットアップでレジストリ設定を管理することが理想的です。 (c) レジストリ キーのインストール/削除/トランザクションのロジックは Microsoft によって既に作成されているため、自分で書き直す必要はありません。
プロジェクトは今日まで VS2008 でしたが、VS2010 にアップグレードしたばかりなので、2008 年から 2010 年の間に何かが変更され、この動作が可能になった可能性があります。
では、カスタム アクションを使用するよりも、これを行うためのより良い方法はありますか?
編集:この回答を見つけました。これは、インストール プロジェクト内の Windows インストールの「レジストリ」テーブルにアクセスできることを示唆しているようです。ただし、アクセスする方法がわかりません。以前は、特別な外部ツール (Orca) から MSI データベースにアクセスできたことを思い出すようですが、セットアップ プロジェクトでこれらのテーブルにアクセスできるかどうかはわかりません。
編集 2:ああ、私は何かに取り組んでいるかもしれません。おそらくビルド後のイベント:
* RegAsm を 2 回実行します。1 回は /codebase を使用し、もう 1 回は使用しません。どちらも /regfile オプションを使用します。次に、両方のファイルをマージ (重複を削除) し、すべての HKCR 参照を HKCU\Software\Classes に置き換えます。