2011-09-13 12 views
10

me gustaría instalar un controlador para un puerto serie utilizando InnoSetup. Tengo el archivo inf, y puedo instalar el controlador manualmente a través de administrador de dispositivos, pero me gustaría ser capaz de incluir el controlador en mi instalador para que los usuarios no tienen que pasar por la molestia de instalar el controlador de sí mismos.¿Cómo puedo instalar un controlador usando InnoSetup?

+0

yo no era capaz de instalar los conductores en DESTDIR: "C: \ Windows \ System32 \ drivers \" ;, apesar de que se especifica la ruta exacta hasta que añadí " ArchitecturesInstallIn64BitMode = x64 "a [Configuración]. Así que asegúrate de tener ese conjunto. –

Respuesta

13

Ver InstallHinfSection en MSDN. La documentación también menciona cómo invocar una instalación llamando a 'Rundll32.exe'. Probablemente usted va a terminar con algo como esto:

[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; 


Tenga en cuenta que puede que tenga que ejecutar la instalación en modo de 64 bits en sistemas de 64 bits para poder instalar el controlador:

[Setup] 
.. 
ArchitecturesInstallIn64BitMode=x64 

también puede colocar comprobaciones para ejecutar la versión del archivo .inf dependiendo de la arquitectura de la máquina (por ejemplo, Check: Is64BitInstallMode).

+2

El modo de 64 bits de InnoSetup * no * produce un instalador de 64 bits ejecutable. Necesitará usar un pequeño helper de 64 bits ejecutable solo para invocar la API necesaria. Las API para usar son 'UpdateDriverForPlugAndPlayDevices' en XP, y' DiInstallDriver' en cualquier cosa pasada XP. –

3

Esta es una respuesta mejor: Inno setup: install drivers with rundll32 or dpinst?

Usando InstallHinfSection en Windows 7 y más allá parece ser roto o llena de dificultades. Hacer que funcione desde un archivo por lotes es difícil, hacerlo funcionar desde innosetup es aún más difícil. DPINST parece preferible, y es más simple.

1

que utilizan DPInst así:

[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"; 
Cuestiones relacionadas