2

VS 2008 セットアップおよび展開プロジェクトを使用して、管理対象/管理対象外の混合アプリケーションを展開しています。組み込みの登録プロパティ (「vsdraCOM」は「Register」プロパティの列挙値) を使用して混合モード DLL を登録する際に問題がありました。回避策として、.NET カスタム インストール アセンブリを追加しました (クラスはSystem.Configuration.Install.Installer から派生します。) そのクラスが実行されており、多数のアセンブリの Dll(Un)RegisterServer エントリ ポイントの実行を含む、多数の操作がそのアセンブリ内のコードを介して正常にインストールおよびアンインストールされていることは確かです。 .

ただし、1 つの DLL が正常に登録されていません。これは、GAC にインストールするサードパーティ製の再頒布可能アセンブリに依存する唯一の DLL です。VS 2008 のセットアップおよび展開プロジェクトの組み込みサポートのおかげで、これらのアセンブリを GAC にインストールしましたが、それが機能していることはわかっています。インストーラーが GAC インストールを実行する前に、カスタム アクションが実行されていることを確認しました。

うわー。私の質問は、カスタム アクションを実行する前に、インストーラーに GAC インストールを強制的に実行させる方法はありますか? これを行うためにカスタム アクションの「条件」プロパティを使用する方法はありますか? そうでない場合、私の最良の代替手段は何ですか? DLL からレジストリ エントリを取得し、インストーラのレジストリ設定に追加します (将来誰かがクラスに新しい COM サーバーを追加する可能性があるため、これは望ましくありません)。.NET コードを使用してアセンブリを GAC に手動でインストールします (その方法はまだわかりません)。

ありがとう、

デイブ

4

1 に答える 1

2

Visual Studio で作成できるセットアップ プロジェクトは非常に限られています。カスタム アクションは 4 つのポイントでのみスケジュールできます。ただし、MSI では、プロセスの任意の時点でカスタム アクションをスケジュールできますが、実行できる操作にはいくつかの制限があります。

私の最初の解決策は、Visual Studio 2008 をセットアップ開発ツールとして使用するのをやめることです。Visual Studio チームは、インストール作成の複雑さをすべて抽象化しようとしました。ただし、その過程で、MSI のすべての柔軟性も奪われました。Wix、InstallShield、または Wise は、単純なインストール以外にははるかに優れた製品です。インストールに Visual Studio を使い始めたのですが、結局は大変な作業になりました。常にもう 1 つの回避策を実装し、その副作用に対処する必要がありました。

テクノロジを切り替えることができない場合は、結果の MSI ファイルを手動で変更する方法を学ぶ必要があります。あなたの場合、InstallExecuteSequence テーブルhttp://msdn.microsoft.com/en-us/library/aa369500(VS.85).aspxを変更する必要があります。これは、Orca ( http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx ) または MSI API http://msdn.microsoft.com/en-usを介して手動で行うことができます。 /library/aa372860(VS.85).aspx . 必ず Orca をダウンロードし、インストールに対して検証スクリプトを実行してください。スクリプトは、顧客のマシンに展開する際に修正することで数え切れないほどの時間を節約できるという多くの問題を指摘しています。

于 2009-07-20T17:14:00.780 に答える