4

状況:

Process.StartCOM を使用して 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 オブジェクトに比較的慣れておらず、レジストリ内の自分の作成物をいじっています。そのため、彼がやるべきことを私ができないと言って、彼の首を絞めたくはありません。

ありがとう!

4

2 に答える 2

2

私があなたの質問を正しく理解していれば、あなたは次のことを意味します:

  • 独自の MSI を使用してネットワーク内に DLL を展開することはできません。
  • IT 部門が提供する MSI に DLL をパッケージ化して展開する方法を制御することはできません。
  • DLL を登録する IT の方法が、自分の方法とまったく同じように機能することを望んでいます。

このような状況では、インストール パッケージ (MSI) の代わりにマージ モジュール (MSM) を作成することをお勧めします。すべてのセットアップ ロジック (ファイル、レジストリ キー、カスタム アクションなど) をマージ モジュールに入れます。

次に、そのマージ モジュールを自分で使用するための単純な MSI シェルを作成し、そのマージ モジュールを IT 部門に提供して、独自のインストール パッケージ ビルド プロセスに統合するよう依頼します。

于 2012-06-19T19:28:42.110 に答える
1

これには「regsvr.exe」というユーティリティがあります。これは System32 にあり、コマンドラインで「regsvr」だけで呼び出すことができるはずです。したがって、呼び出しは次のとおりです。

prompt> regsvr [dllname]

ここで、[dllname] は DLL ファイルの名前です (現在のディレクトリにある場合は相対名でかまいません)。

Windows Vista および 7 では、このコマンドは管理者権限で明示的に実行する必要があり (つまり、管理者権限で cmd.exe を実行する必要があります)、単に管理者であるだけでは十分ではありません。

管理者権限でコマンド プロンプトを実行するには、スタート バーを開き、検索フィールドに「cmd」と入力し、[CTRL][SHIFT][ENTER] で起動し、UAC プロンプトが表示されたら受け入れます。(この方法で、任意のプログラムを管理者として実行できます。)

于 2012-06-19T19:28:30.797 に答える