2011-09-13 3 views
10

Mi piacerebbe installare un driver per una porta seriale usando InnoSetup. Ho il file inf e posso installare manualmente il driver tramite il gestore dispositivi, ma mi piacerebbe poter includere il driver nel mio programma di installazione in modo che gli utenti non debbano passare attraverso il problema di installare il driver da soli.Come posso installare un driver usando InnoSetup?

+0

non ero in grado di installare i driver in DestDir: "C: \ Windows \ System32 \ drivers \" ;, eventhough ho specificato il percorso esatto fino a quando ho aggiunto " ArchitecturesInstallIn64BitMode = x64 "a [Setup]. Quindi assicurati di avere quel set. –

risposta

13

Vedere InstallHinfSection su MSDN. La documentazione menziona anche come richiamare un'installazione chiamando "Rundll32.exe". Probabilmente vi ritroverete con qualcosa di simile:

[Files] 
.. 
Source: "driver\my_x86driver.inf"; DestDir: {app}\driver; 
Source: "driver\my_x86driver.sys"; DestDir: {app}\driver; 

[Run] 
.. 
Filename: {sys}\rundll32.exe; Parameters: "setupapi,InstallHinfSection DefaultInstall 128 {app}\driver\my_x86driver.inf"; WorkingDir: {app}\driver; Flags: 32bit; 


Si noti che potrebbe essere necessario eseguire l'installazione in modalità a 64 bit in sistemi a 64 bit per essere in grado di installare il driver:

[Setup] 
.. 
ArchitecturesInstallIn64BitMode=x64 

anche è possibile eseguire verifiche per eseguire la versione del file inf in base all'architettura della macchina (ad es. Check: Is64BitInstallMode).

+2

La modalità a 64 bit di InnoSetup * non * produce un eseguibile di installazione a 64 bit! È necessario utilizzare un eseguibile a 64 bit di supporto piccolo solo per richiamare l'API necessaria. Le API da usare sono 'UpdateDriverForPlugAndPlayDevices' su XP, e' DiInstallDriver' su qualsiasi cosa che sia passata in XP. –

3

Questa è una risposta migliore: Inno setup: install drivers with rundll32 or dpinst?

Utilizzando InstallHinfSection su Windows 7 e sembra al di là di essere o rotto o irto di difficoltà. Farlo funzionare da un file batch è difficile, farlo funzionare da innosetup è ancora più difficile. DPINST sembra preferibile ed è più semplice.

1

Ho usato DPInst come questo:

[Files]  
Source: "Source\dpinst\dpinst32.exe"; DestDir: "{app}\driver"; DestName: dpinst.exe; Check: not IsWin64; Flags: ignoreversion 
Source: "Source\dpinst\dpinst64.exe"; DestDir: "{app}\driver"; DestName: dpinst.exe; Check: IsWin64; Flags: ignoreversion 

[Run] 
Filename: "{app}\driver\dpinst.exe"; Parameters: "/A /LM";