2010-04-28 5 views
6

Ho un'applicazione scritta in C# che dipende dal provider gestito sqlite. Il provider sqlite dipende dalla piattaforma (ci sono due DLL per applicazioni a 32 e 64 bit con lo stesso nome). L'applicazione carica quella desiderata in fase di esecuzione in base al sistema operativo.Assiemi 32 e 64 bit in un programma di installazione di Windows

Il problema è che, mentre la creazione di un programma di installazione non posso aggiungere modalità dll a 64 bit per il progetto di installazione come sto ottenendo il seguente errore: File '' targeting '' is not compatible with the project's target platform ''.

vorrei utilizzare altro installatore ma ho un'azione personalizzata che deve essere invocato durante l'installazione.

Quindi volevo sapere se c'è un programma di installazione che mi permetterà di aggiungere dll a 32 e 64 bit ed eseguire azioni personalizzate scritte in C#.

Una possibile soluzione è avere due installatori ma vorrei evitarlo se possibile.

Qualche suggerimento?

risposta

6

Il programma di installazione Inno Setup supporta la funzionalità richiesta dall'utente, questo programma di installazione è molto flessibile e affidabile, esistono numerosi esempi di script nel Web per creare un'installazione condizionale in base all'architettura del client finale.

controllare questo script situato nella 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

con Windows Installer, no. Avrai bisogno di due impostazioni.

Tuttavia NSIS è in grado di gestire entrambe le piattaforme in un'unica configurazione con rilevamento runtime. Dipende molto dal fatto che tu stia bersagliando o meno gli utenti Enterprise, i clienti Enterprise richiederanno pacchetti Windows Installer (MSI) mentre il tuo utente medio non si preoccupa :)

1

Mi piace l'idea del setup Inno, probabilmente darei prova, ma considera quanto segue:

Microsoft La migliore pratica Microsoft MSI è quella di disporre di 2 impostazioni separate, una per 32 e una per 64 e molti IDE di terze parti come Installshield supportano tali best practice. IMO ci sono probabilmente ragioni per questo, altrimenti avrebbero aggiunto questa funzionalità per avere un vantaggio rispetto alla concorrenza.

Per costruire 2 setup da un unico progetto di installazione, dovreste avere sia gli installatori costruita dallo stesso progetto di installazione, utilizzando rilascia bandiere, si crea fondamentalmente una funzione che contiene gli assembly a 32 bit, un altro contenente quelle a 64 bit, assegnare un flag di rilascio a ciascuno di essi e crea ciascuna release separatamente,

Quindi al momento della compilazione, si costruisce la versione a 32 bit, è impacchettata, mentre il 64 bit viene ignorato, quindi si esegue lo stesso per 64 bit. È possibile passare tali flag tramite gli argomenti della riga di comando, se necessario.

In questo modo non è necessario duplicare il codice di installazione.

1

Windows Installer funziona correttamente in questo scenario, ad es. avere due componenti ciascuno con uno dei file sqlite e installare in modo condizionato uno o l'altro in base alla proprietà VersionNT64, che viene impostata solo quando l'installazione viene eseguita su una piattaforma a 64 bit.

Problemi correlati