2009-07-20 22 views
1

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

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

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

おかげで、

デイブ

答えて

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をダウンロードし、あなたのインストールに対して検証スクリプトを実行してください。このスクリプトは、顧客のマシンに展開する際の無駄な時間を節約できるという多くの問題を指摘しています。

+0

ありがとうございます。私たちはinstallshieldを使用しますが、ビルドコンピュータが再び稼働するまでに数週間かかるため、確実なインストールが必要です。 MSI APIソリューションは有望ですね。私は、System.EnterpriseServices.Internal.Publish.GACInstall()がGACに任意のアセンブリをインストールすることを発見しましたが、これは理想的ではありません(内部的なエラーチェックやロールバック/アンインストールの意味論。) –

関連する問題