2010-04-28 5 views
6

J'ai une application écrite en C# qui dépend du fournisseur géré sqlite. Le fournisseur sqlite dépend de la plate-forme (il existe deux DLL pour les applications 32 et 64 bits portant le même nom). L'application charge celle souhaitée à l'exécution en fonction du système d'exploitation.Assemblages 32 et 64 bits dans un programme d'installation Windows

Le problème est que, tout en créant un programme d'installation, je ne peux pas ajouter dll en mode 64 bits au projet d'installation que je reçois l'erreur suivante: File '' targeting '' is not compatible with the project's target platform ''.

J'utiliser un autre programme d'installation, mais j'ai une action personnalisée qui doit être invoqué lors de l'installation. J'ai donc voulu savoir s'il y avait un programme d'installation qui me permettrait d'ajouter 32 et 64 bits dll et exécuter une action personnalisée écrite en C#

Une solution possible est d'avoir deux installateurs mais je voudrais l'éviter si possible.

Des suggestions?

Répondre

6

Le programme d'installation Inno Setup prend en charge la fonctionnalité que vous demandez, ce programme d'installation est très flexible et fiable, existe de nombreux exemples de scripts sur le Web pour effectuer une installation conditionnelle en fonction de l'architecture du client final.

Vérifiez ce script situé dans C:\Program Files\Inno Setup 5\Examples\64BitThreeArch.iss

-- 64BitThreeArch.iss -- 
; Demonstrates how to install a program built for three different 
; architectures (x86, x64, Itanium) using a single installer. 

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 

[Setup] 
AppName=My Program 
AppVerName=My Program version 1.5 
DefaultDirName={pf}\My Program 
DefaultGroupName=My Program 
UninstallDisplayIcon={app}\MyProg.exe 
Compression=lzma2 
SolidCompression=yes 
OutputDir=userdocs:Inno Setup Examples Output 
; "ArchitecturesInstallIn64BitMode=x64 ia64" requests that the install 
; be done in "64-bit mode" on x64 & Itanium, meaning it should use the 
; native 64-bit Program Files directory and the 64-bit view of the 
; registry. On all other architectures it will install in "32-bit mode". 
ArchitecturesInstallIn64BitMode=x64 ia64 

[Files] 
; Install MyProg-x64.exe if running on x64, MyProg-IA64.exe if 
; running on Itanium, MyProg.exe otherwise. 
Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: IsX64 
Source: "MyProg-IA64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: IsIA64 
Source: "MyProg.exe"; DestDir: "{app}"; Check: IsOtherArch 
Source: "MyProg.chm"; DestDir: "{app}" 
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 

[Icons] 
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 

[Code] 
function IsX64: Boolean; 
begin 
    Result := Is64BitInstallMode and (ProcessorArchitecture = paX64); 
end; 

function IsIA64: Boolean; 
begin 
    Result := Is64BitInstallMode and (ProcessorArchitecture = paIA64); 
end; 

function IsOtherArch: Boolean; 
begin 
    Result := not IsX64 and not IsIA64; 
end; 
1

Avec Windows Installer, non. Vous aurez besoin de deux configurations.

Toutefois, NSIS est tout à fait capable de gérer les deux plates-formes dans une seule configuration avec détection d'exécution. Cela dépend vraiment si vous ciblez les utilisateurs d'Enterprise ou non, les clients d'entreprise exigeront des paquets de Windows Installer (MSI) tandis que votre utilisateur moyen d'Internet ne s'en soucie pas :)

1

J'aime l'idée d'installation d'Inno, je donnerais probablement il s'agit d'un essai, mais considérez ce qui suit:

La meilleure pratique de Microsoft MSI est d'avoir 2 configurations séparées, une pour 32 et une pour 64, et beaucoup d'IDE tiers comme Installshield approuvent ces meilleures pratiques. OMI il y a probablement des raisons pour cela, sinon ils auraient ajouté cette fonctionnalité pour avoir un avantage sur les concurrents. Pour construire 2 configurations à partir d'un seul projet d'installation, vous auriez les deux installeurs construits à partir du même projet d'installation, en utilisant des drapeaux de versions, vous créez essentiellement une fonctionnalité contenant vos assemblages 32 bits, une autre contenant les 64 bits, assignez Donc, au moment de la construction, vous construisez la version 32 bits, elle est empaquetée, tandis que la version 64 bits est ignorée, alors vous faites la même chose pour la version 64 bits. Vous pouvez passer ces indicateurs via des arguments de ligne de commande si nécessaire.

De cette façon, vous n'avez aucun code d'installation en double à maintenir.

1

Windows Installer fonctionne correctement dans ce scénario, par ex. avoir deux composants chacun avec l'un des fichiers sqlite et installer conditionnellement l'un ou l'autre en fonction de la propriété VersionNT64, qui est seulement définie lorsque l'installation s'exécute sur une plate-forme 64 bits.

Questions connexes