VS2008 x86 インストーラーで x64 アセンブリを x64 にインストールするにはどうすればよいですか?
-
09-06-2019 - |
質問
VS2008 インストーラー (およびカスタム Orca アクション) を使用して、.NET 製品のインストーラーを作成しています。
私が使用していたサードパーティ アセンブリの 1 つが x86 固有であることを最近知りました (ネイティブ コードが含まれているため)。そのため、x64 の顧客は、アセンブリがプラットフォームに適していないというエラーにより、起動時にクラッシュが発生していました。
私はそのような顧客に、このサードパーティ アセンブリの x64 バージョンのコピーを送り、それを既存の x86 アセンブリに上書きするように指示しました。うまくいきました、素敵です!したがって、あとはインストーラーにこれを実行させるだけです。
これは実際には自明ではないように見えます:(。理想的には、インストーラー (両方のプラットフォームで実行できるため、x86 になります) に、このサードパーティ アセンブリの x86 バージョンと x64 バージョンの両方を含めて、適切なものをインストールするだけです。言い換えれば、ユーザーの作業を楽にする単一のインストーラーが必要です。
MSI 条件ステートメントなどを使用して、これを解決したと思いました。しかし、どうやらそうではないようです...「x86」または「x64」を指定しない限り、VS2008セットアッププロジェクトはコンパイルされません。 X86を指定すると、X64アセンブリを含めることができないというコンピレーションエラーが発生します。x64 を指定した場合、結果は x86 コンピューターでは実行できません。くそ!
誰かが以前にこの問題を抱えていたはずです。残念ながら Google は役に立たないので、StackOverflow に頼ります。
解決
私の理解が正しければ、x86 にインストールしている場合は 1 つのファイルのコピーを実行し、x64 プラットフォームにインストールしている場合は別のファイル (同じ名前) をコピーしたいことになります。
まず、x64 MSI は x86 プラットフォームでは実行できず、x86 MSI は x64 プラットフォーム上で WOW64 を使用してインストールされるため、2 つの異なるプラットフォームに 1 つの MSI を作成することはできません。
一方、2 つの異なるバージョンのファイルを含む 1 つの x86 MSI を作成し、インストール中に適切なファイルを選択的にコピーすることができます。
最も簡単な方法は、ビルトインの VS2008 MSI ジェネレーターの代わりに WIX (V3) を使用することです。WIX を使用すると、顧客のマシンに何をどこにインストールするかをより詳細に制御できるほか、さまざまなプラットフォーム用にさまざまなインストーラーを生成する機能や、追加のボーナスとして MSBuild を完全にサポートできます。(見る http://wix.sourceforge.net 詳細については。)
WIX がまだベータ版であることを疑問に思っている方のために付け加えておきますが、生成された MSI ファイルは完全に問題なく、まだバグに遭遇したことはありません。(私はセットアップ プロジェクトを開発して生計を立てています。)
最後に、VersionNT64 プロパティを使用して、x86 インストーラーが x64 プラットフォームで実行されているかどうかを確認できます。そのプロパティが存在する場合は x64 を実行しており、それ以外の場合は x86 で実行しています。
お役に立てれば。
他のヒント
1年前にこれを調査したとき、それは不可能であるという結論に達しました。Microsoft が提供する MSI ファイルの多くは x86 と x64 の別々の形式で提供されており、おそらく、可能であれば 1 つのファイルのみを提供することになることに注意してください。
私は、2 つの機能を使用して 2 つのファイル セットを選択的に含めることで、ある程度の成功を収めました (もちろん、個別のファイル識別子を持つ別個のコンポーネントに)。
x32 と x64 の両方にインストールするには、インストールを x32 としてマークする必要があります。これは常に x32 ディレクトリにインストールされ、主に WOW で実行される 32 ビット アプリケーションとして扱われます。
VersionNT64 プロパティを使用すると、Windows 64 インストールが存在するかどうかを確認し、必要なファイルを条件付きでインストールできます。
VS2008 インストール プロジェクトでこの機能がどの程度利用できるかはわかりません。この方法でインストーラーをセットアップするために他の商用ツールを使用しています。もちろん、Orca を使用してそれを行うこともできますが、商用ツールで動作させるのは簡単ではなく、Orca の方がはるかに困難です。