5

Ich verwende das VS2008-Installationsprogramm (plus eine benutzerdefinierte Orca-Aktion), um ein Installationsprogramm für mein .NET-Produkt zu erstellen.Wie kann ich mit meinem VS2008 x86-Installationsprogramm x64-Assemblys auf x64 installieren?

Ich habe gerade kürzlich herausgefunden, dass eine der Drittanbieter-Assemblies, die ich verwendete, x86-spezifisch ist (da es einigen systemeigenen Code enthält); Daher wurden x64-Kunden beim Start abgestürzt, wobei Fehler bezüglich der Assembly nicht für ihre Plattform geeignet waren.

Ich schickte einem solchen Kunden eine Kopie der x64-Version dieser Drittanbieter-Assembly und sagte ihm, es einfach über die bestehende x86-Version zu kopieren. Es hat funktioniert, süß! Jetzt muss ich den Installer das nur für mich machen lassen.

Das scheint eigentlich nicht trivial :(. Idealerweise möchte ich nur das Installationsprogramm (das wäre x86, da das auf beiden Plattformen ausgeführt werden kann) sowohl die x86 und x64-Versionen dieser Drittanbieter-Assembly und installieren Sie die Mit anderen Worten, ich möchte ein einziges Installationsprogramm, das den Benutzern das Leben leicht macht.

Ich dachte, ich hätte dies mit MSI-bedingten Anweisungen und all dem. Aber anscheinend nein ... die VS2008 Setup-Projekte Kompiliert wird nur, wenn Sie "x86" oder "x64" angeben. Wenn Sie x86 angeben, wird ein Kompilierungsfehler angezeigt, der besagt, dass die x64-Assembly nicht enthalten sein kann. Wenn Sie x64 angeben, kann das Ergebnis nicht auf einem x86-Computer ausgeführt werden Verdammt!

Jemand muss dieses Problem schon einmal gehabt haben. Leider ist Google nicht hilfreich, also wende ich mich an StackOverflow!

Antwort

3

Wenn ich Sie richtig verstehe, möchten Sie eine Kopie von einer Datei erstellen, wenn Sie auf x86 und andere Datei (mit dem gleichen Namen) installieren, wenn Sie auf einer x64-Plattform installieren.

Zunächst einmal können Sie kein MSI für 2 verschiedene Plattformen erstellen, da ein x64 MSI einfach nicht auf einer x86-Plattform läuft und ein x86 MSI mit WOW64 auf einer x64-Plattform installiert wird.

Auf der anderen Seite können Sie ein x86 MSI erstellen, das zwei verschiedene Versionen einer Datei enthält, und die entsprechende Datei während der Installation selektiv kopieren.

Der einfachste Weg ist die Verwendung von WIX (V3) anstelle des integrierten VS2008 MSI-Generators.WIX gibt Ihnen viel mehr Kontrolle darüber, was auf dem Rechner des Kunden installiert wird und wo die Möglichkeit besteht, verschiedene Installer für verschiedene Plattformen und volle MSBuild-Unterstützung als zusätzlichen Bonus zu generieren. (siehe http://wix.sourceforge.net für weitere Informationen.)

Falls Sie sich wundern, dass WIX noch in der Betaversion ist, sind die generierten MSI-Dateien vollkommen in Ordnung, und ich bin noch nie auf einen Fehler gestoßen. (Und ich entwickle Setup-Projekte für ein Leben.)

Schließlich können Sie mit der Eigenschaft VersionNT64 prüfen, ob ein x86-Installationsprogramm auf einer x64-Plattform ausgeführt wird. Wenn diese Eigenschaft vorhanden ist, führen Sie x64 aus, andernfalls laufen Sie auf einem x86.

Hoffe, das hilft.

+0

Danke; Das ist die beste Lösung, denke ich. Wenn Sie sagen, dass "ein x86 MSI mit WOW64 auf einer x64-Plattform installiert wird", würde dies bedeuten, dass meine Anwendung am Ende WOW64 wäre? Und ich vermute, das ist schlecht. Also könnte ich am Ende eine Art von Boonstrapper zwischen MSIs wählen? – Domenic

+0

"Würde das bedeuten, dass meine Bewerbung am Ende WOW64 wäre?" - Ja, das würde genau das bedeuten. Ihre Anwendung wird als 32-Bit-Prozess auf einem 64-Bit-Rechner ausgeführt, da sie im Ordner "Programmdateien (x86)" installiert ist. Ein x86-Bootstrapper ist in der Tat eine Lösung, mit der Sie das entsprechende MSI gezielt starten können. –

6

Als ich das vor einem Jahr angeschaut habe, kam ich zu dem Schluss, dass das nicht möglich war. Es ist erwähnenswert, dass viele von Microsoft bereitgestellte MSI-Dateien in separaten x86- und x64-Versionen vorliegen - und vermutlich würden sie nur eine einzige Datei liefern, wenn dies möglich wäre.

1

Ich hatte einige Erfolge mit zwei Funktionen, um selektiv die zwei Sätze von Dateien (in separaten Komponenten natürlich mit ihren individualisierten Dateikennungen!).

Die Installation muss als x32 markiert sein, um sowohl auf x32 als auch auf x64 zu installieren. Es wird immer in den x32-Verzeichnissen installiert und wird weitgehend als 32-Bit-Anwendung behandelt, die unter WOW läuft.

Mithilfe der Version NT64-Eigenschaft können Sie feststellen, ob eine Windows 64-Installation vorhanden ist, und die erforderlichen Dateien bedingt installieren.

Ich bin nicht sicher, wie viel von dieser Funktionalität in VS2008 Installationsprojekten verfügbar ist - ich verwende einige andere kommerzielle Tools, um das Installationsprogramm auf diese Weise einzurichten. Natürlich können Sie Orca auch dazu verwenden, obwohl es nicht trivial ist, es mit kommerziellen Tools zu arbeiten, und Orca ist viel schwieriger.