2012-10-31 24 views
8

Devo installare un driver durante il mio processo di installazione in InnoSetup. Per questo ho due .msi file di installazione per 32 bit/64 bit. Ora in Win7, questo driver è già incluso, quindi non ho bisogno di installarlo di nuovo. Finora, ho fatto questo:controllare la versione per Windows nel segmento [Esegui] del file di configurazione InnoSetup

[Tasks]     
Name: "install_usb"; Description: "Install USB driver"; GroupDescription: "Drivers:"; 

[Files] 
Source: "xy\driver\*"; DestDir: "{tmp}" 

[Run]  
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_32bit.msi"""; StatusMsg: "Installing 32bit USB driver"; Check: not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_64bit.msi"""; StatusMsg: "Installing 64bit USB driver"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

Quindi, l'utente può scegliere se desidera installare il driver. Se ha scelto di farlo, viene eseguito il driver corretto. Funziona bene Ora voglio scegliere di non installare il driver se> = Win7 è in esecuzione. Ho letto di OnlyBelowVersion: 6.1 ma mi sembra di essere in grado di fare qualcosa di simile nella sezione [Run]:

[Run]  
... Check: IsWin64() and OnlyBelowVersion:6.1; ... 

Come posso usare OnlyBelowVersion (o qualcosa di simile) nella sezione [Run]?

Inoltre, voglio fare in modo che il msi viene eseguito nella modalità corretta (modalità a 64 bit per i sistemi a 64 bit). Perché penso, non è il caso adesso. È possibile far rispettare questo? Ho scoperto circa ArchitecturesInstallIn64BitMode=x64, dove devo metterlo?

risposta

10

Il parametro OnlyBelowVersion non è possibile utilizzare nell'istruzione Check, ma come parametro separato.

[Run]  
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_32bit.msi"""; OnlyBelowVersion: 6.1; StatusMsg: "Installing 32bit USB driver"; Check: not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_64bit.msi"""; OnlyBelowVersion: 6.1; StatusMsg: "Installing 64bit USB driver"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

A voi seconda domanda, la funzione restituisce True IsWin64 in tutte le edizioni a 64 bit di Windows, in modo che è quello che hai corretto. Dalla referenza:

Questa funzione restituirà sempre True su una versione x64 di Windows.

Per eseguire l'installazione di InnoSetup in modalità a 64 bit come già accennato, è necessario specificare almeno la direttiva ArchitecturesInstallIn64BitMode. Se si specifica questa direttiva con almeno uno dei valori disponibili, la configurazione verrà eseguita in modalità a 64 bit su computer con le architetture di processore specificate, in modalità a 32 bit se si esegue la configurazione sulla macchina con processore x86 .

+0

Cool, funziona perfettamente. Per la seconda domanda: Mentre sì, questo restituisce true in una versione x64, garantisce anche che gli eseguibili e l'installer vengano eseguiti in modalità 64 bit? – brimborium

+0

Oh, pensavo che volessi installare l'installer 'driver_64bit.msi' su sistemi a 64 bit, non l'installer di InnoSetup. Quindi aggiornerò la risposta ... – TLama

+0

Bene, l'autista è la parte importante. Ma se non è difficile includere anche l'installatore stesso in questa condizione, allora questa è una buona cosa. – brimborium

Problemi correlati