Pregunta

Me gustaría llamar a varios archivos .msi en modo silencioso, y poner fin a toda la instalación y alguna no.

¿Es posible para obtener los códigos de retorno de msiexec.exe siendo llamados desde la sección [plazo]?

En la actualidad sólo puedo ver los mensajes de error en el visor de eventos de Windows.

¿Fue útil?

Solución

Actualmente no existe una manera de comprobar la ejecución exitosa de [Run] entradas. El código sólo registra el código de salida del proceso y continúa con la siguiente entrada (que puede ser examinado en el archivo de origen Inno Setup Main.pas , la función es ProcessRunEntry () , a partir de la línea 3404 en la versión actual 5.2.3).

Si usted necesita para asegurarse de que las múltiples ejecuciones de msiexec tuvieron éxito tendrá que codificar una capa intermedia. Esto puede ser tan simple como un pequeño trozo que se ejecuta en las entradas [Ejecutar] y msiexec.exe comienza con los parámetros correctos, espera a que termine el proceso, a continuación, escribe el código de retorno en un archivo.

Otra forma de comprobar el éxito de un paso de dicha instalación sería añadir una llamada de procedimiento a medida para cada [Ejecutar] ingreso mediante el uso de la etiqueta AfterInstall Parámetros. En tal función se podría, por ejemplo, comprobar si un control OCX se ha instalado correctamente:

[Run]
Filename: "{tmp}\MyInstallation1.exe"; Parameters: "/foo"; AfterInstall: AfterMyInstallation1

[Code]
var
  MyInstallation1Success: boolean;

procedure AfterMyInstallation1;
var
  V: Variant;
begin
  try
    V := CreateOleObject('MyInstallation.InstalledOcxControl.1');
    MyInstallation1Success := True;
  except
    MyInstallation1Success := False;
  end;
end;

o si los directorios y entradas del registro para la dependencia son todo lo que hay.

Cada [Ejecutar] ingreso sólo se ejecuta cuando su opcional Verificar parámetro no return true. Así que dependiendo de sus necesidades, ya sea que usted podría comenzar las instalaciones silenciosas, una tras otra, y después de que el pasado ha terminado ejecutar una función de secuencia de comandos para comprobar que todas las dependencias se han instalado correctamente; o usted podría escribir una función de verificación de cada instalación de dependencia, que luego se devuelve falso y por lo tanto obviar todas las demás instalaciones después de la primera fallaron uno.

Nota sin embargo que todos los [Ejecutar] entradas se ejecutan después de los pasos para la copia de archivos, registro escrito etc se han completado, por lo que son básicamente ya se ha terminado con la instalación. Si desea ejecutar realmente todos sus pasos de instalación sólo cuando todas las dependencias se han instalado correctamente, entonces usted tendría que hacer eso antes en el proceso, cuando la instalación todavía se puede cancelar.

Editar Confirmar la pregunta " ¿Cómo se hace Inno Setup no se ven congelado mientras se realiza una larga Exec? " donde se da alguna información y un script de ejemplo está vinculada a sobre el uso de la etiqueta Exec () función para la instalación de dependencias. Así que si usted no utiliza [Ejecutar] entradas hay una buena oportunidad de lograr lo que desea.

Otros consejos

Puede utilizar mi respuesta a la pregunta similar a ejecutar comandos de forma segura en la sección [Ejecutar] con la debida notificación y la restitución en la error.

El enlace anterior es una solución completa, pero la idea es Folowing:

1) mensaje de error al archivo temporal {tmp} \ install.error con el parámetro de beforeInstall InnoSetup.

2) shell de comandos Uso Windows "cmd.exe / s / c" para ejecutar el programa deseado. También utilice la ejecución condicional de mando "del" con "&&" - http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true . Así archivo de mensajes de error se eliminaría si el comando tiene éxito (código de salida 0). Tenga en cuenta las cotizaciones especiales de manejo en "cmd.exe / s / c".

3) Comprobar la existencia del archivo de mensajes de error {tmp} \ install.error con el parámetro de AfterInstall InnoSetup y abortar instalar con la debida notificación o confirmación (y la presentación opcional del archivo de registro) y realizar la recuperación utilizando Exec (ExpandConstant ( '{} uninstallexe '), ...

4) Hay algunos pasos adicionales se deben hacer como anulando ShouldSkipPage de InnoSetup (PageID:. Entero) para ocultar la página final, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top