2012-07-10 47 views
6

Estoy usando Inno Setup para crear un instalador para mi aplicación. El instalador es muy básico y simplemente copia algunos archivos. Esto funciona muy bien y estoy contento con eso.Inno Setup launch ejecutable (para instalar los controladores) durante la instalación

Implementé recientemente el soporte USB y necesito instalar el controlador USB de la base IVI para eso. Básicamente es un archivo exe que debe ser lanzado en algún lugar durante el proceso de configuración. Hasta ahora, el usuario debe instalar los controladores por separado, lo que no es tan elegante. Mi primer enfoque fue este:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: postinstall skipifsilent 

Esto funciona, pero el usuario tiene que seleccionar la bitness correcta. La ventaja aquí es que puede optar por no instalarlo (en cuyo caso, la aplicación simplemente ignora la funcionalidad USB, que está bien). Lo que realmente quiero es detectar la bitness del sistema automáticamente y ejecutar el proceso de configuración. Esto no tiene por qué estar en la sección [Run], aunque no tendría nada en contra (porque el usuario puede elegir no instalarlo).

También encontré algo de código y trató de ejecutarlo así:

[Code] 
procedure CurStepChanged (CurStep: TSetupStep); 
var 
    WorkingDir: String; 
    ReturnCode: Integer; 
begin  
    if (ssInstall = CurStep) then 
    Log('Starting driver installation'); 
    WorkingDir := ExpandConstant ('{app}\driver'); 
    Exec ('IviSharedComponents_2.2.1.exe', '', WorkingDir, SW_SHOW, ewWaitUntilTerminated, ReturnCode); 
end; 

Pero esto no se inicia la instalación (aunque puedo ver la entrada del registro 'A partir de la instalación del controlador'). ¿Hay algo mal en mi camino? ¿Qué estoy haciendo mal y cómo podría cambiar esta secuencia de comandos para seleccionar automáticamente el ejecutable correcto dependiendo de la bitness?

EDIT: utilicé la solución propuesta con la entrada [Tasks]. La implementación se ve así (solo como referencia):

[Tasks] 
Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:"; 

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

Esto funciona muy bien, muchas gracias por su ayuda!

Respuesta

8

En este caso, lo mejor es quitar la bandera postinstall para que se ejecute sin condiciones al final del proceso de configuración (pero antes de que aparezca Finalizado) y añadir un parámetro Check: a limitarlo al valor de bits correcta:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent 

Si desea que esto sea condicional, puede usar una entrada normal [Tasks] que se solicita antes de que comience la instalación.

+0

Muy bien, muchas gracias, ¡eso es exactamente lo que quería! :) – brimborium

+1

También agregué mi solución final (con la entrada '[Tasks]') en la parte inferior de mi pregunta. – brimborium

+0

Thx, typo de hecho. ;) – brimborium

Cuestiones relacionadas