状況:
Process.Start
COM を使用して Web ブラウザー経由でプログラムを実行するDLL を C# で作成しました。VS2010 の組み込みの展開プロジェクトを使用して MSI を作成しました。この DLL でオブジェクトの Guid プロパティを指定しますが、場所は指定しません。MSI を実行して "Just Me" のインストールを選択するとHKCU
、予想どおり (current_user) にレジストリ キーが作成されます。すべてのユーザーに対して実行する必要があるため、MSI を実行して「すべてのユーザー」に対してインストールすることを選択すると、HKLM
期待どおりに (local_machine) にレジストリ キーが作成されます。いずれにせよ、MSI が DLL をインストールすると、その DLL を使用するイントラネット Web アプリは、管理者としての私 (current_user) とすべてのユーザー (local_machine) にとってそれぞれ問題なく動作します。
しかし、私の会社の主要な IT 部門内では、独自の MSI を作成することはできません。要求と DLL/TLB ファイルを、ベンダー/社内開発者向けに MSI を作成する唯一の機能を持つ人に送信する必要があります。彼の MSI を手動で実行し、「Everyone」のインストールを選択すると、再び期待どおりに動作します。
問題:
ただし、MSI は展開されたソフトウェアとして自動的に実行される必要があり、この場合、レジストリ キーは でのみ作成されるHKEY_CURRENT_USER
ため、テスト ユーザーが機能を使用しようとしても検出されません。彼は、ALLUSERS
プロパティが 1 に設定されているので、これでうまくいくはずだと言いました。さらに、適切な場所 (local_machine) にインストールするように依頼したところ、DLL 内でこれらの変更を行う必要があると彼は主張しました。インストール」。オンラインのさまざまな記事で読んだことによると、MSI は通常、これらのキーが作成されるレジストリ内の場所を指定します。
質問 (TL;DR にも):
DLL でレジストリの場所を指定する必要があるという彼の主張に真実はありますか? HKLM
もしそうなら、デフォルトでこれらのキーに行くようにプログラムで指定するにはどうすればよいですか? 現在、ComVisible、ClassInterface、Guid、ProgId、および ComDefaultInterface を指定するだけです。MSI の「Everyone/Just Me」を除いて、場所を指定したことはありません。私は COM オブジェクトに比較的慣れておらず、レジストリ内の自分の作成物をいじっています。そのため、彼がやるべきことを私ができないと言って、彼の首を絞めたくはありません。
ありがとう!