Pregunta

El escenario es que tenemos una aplicación cliente / servidor con la instalación del cliente como un programa previo que utiliza Inno Setup que descarga el cliente desde el servidor especificado por el número de puerto / IP. Nos gustaría poder detectar si hay un servidor en la red local a través de la difusión UDP, y podemos escribir una aplicación de consola que lo haga. El problema es, ¿cómo pasamos la información de la aplicación de la consola al instalador?

Puedo capturar el código de retorno, pero eso solo puede ser un int. Por lo que sé, las únicas funciones para leer archivos en Inno Setup son en el preprocesador, por lo que no podemos leer un archivo creado en tiempo de ejecución por la aplicación de la consola. Lo único en lo que puedo pensar es devolver un int donde los primeros 4 dígitos son la posición de '.'s y: antes del puerto y luego analizar el valor, que parece hackish, endeble y propenso a errores, especialmente considerando No estoy muy familiarizado con la sintaxis / funciones de Inno Setup para construir una cadena.

¿Alguna sugerencia?

¿Fue útil?

Solución

No sé cómo cargar un parámetro desde la línea de comando, pero puede usar LoadStringFromFile para cargar el contenido de un archivo o GetIniString para leer un parámetro de un archivo ini.

Más generalmente, busque " Referencia de funciones de soporte " en el archivo de ayuda de Inno Setup. Esta página le dará una lista de todas las funciones Inno (sin incluir el preprocesador). Si no puede encontrar esta página (si solo encuentra información sobre el preprocesador), es posible que esté buscando en el archivo de ayuda incorrecto. Tenga en cuenta que la tabla de contenidos de la Ayuda de Inno Setup no es tan buena, pero el índice es muy bueno.

Los parámetros de la línea de comandos se documentan en la página " Configuración de los parámetros de la línea de comandos " ;. Es posible que pueda engañar a Inno usando uno de los parámetros existentes, pero el uso de un archivo ini parece ser el enfoque más sencillo.

Otros consejos

Si desea analizar los argumentos de la línea de comandos del código en Inno Setup, use un método similar a este. Simplemente llame al instalador desde la línea de comando de la siguiente manera:

c:\MyInstallDirectory>MyInnoSetup.exe -myParam parameterValue

Luego, puede llamar a GetCommandLineParam de esta forma siempre que lo necesite:

myVariable := GetCommandLineParam('-myParam');
{ ================================================================== }
{ Allows for standard command line parsing assuming a key/value organization }

function GetCommandlineParam (inParam: String):String; 
var 
  LoopVar : Integer; 
  BreakLoop : Boolean; 
begin 
  { Init the variable to known values } 
  LoopVar :=0; 
  Result := ''; 
  BreakLoop := False; 

  { Loop through the passed in array to find the parameter } 
  while ( (LoopVar < ParamCount) and 
      (not BreakLoop) ) do 
  begin 
    { Determine if the looked for parameter is the next value } 
    if ( (ParamStr(LoopVar) = inParam) and 
       ( (LoopVar+1) < ParamCount )) then 
    begin 
      { Set the return result equal to the next command line parameter } 
      Result := ParamStr(LoopVar+1); 

      { Break the loop } 
      BreakLoop := True; 
    end 

    { Increment the loop variable } 
    LoopVar := LoopVar + 1; 
  end; 
end; 

Espero que esto ayude ...

InnoSetup incluye un lenguaje de extensión similar a Pascal interpretado que se puede usar para muchas cosas durante el tiempo de ejecución del instalador.

Por ejemplo, sé que puede leer el registro y estoy bastante seguro de que puede leer archivos, al menos desde algunas carpetas. Su aplicación en modo consola podría escribir un archivo temporal o soltar una o más claves de registro que contengan la información necesaria en el resto del instalador, y eso puede devolverse desde el entorno de scripting al script de configuración adecuado. El instalador podría incluso limpiar el archivo temporal y / o las claves más tarde.

Desde el manual de Inno Setup:

{param: ParamName | DefaultValue}

Embeds a command line parameter value.
    * ParamName specifies the name of the command line parameter to read from.
    * DefaultValue determines the string to embed if the specified command 
      line parameter does not exist, or its value could not be determined.

Ejemplo:

[Configuración]  ID de aplicación = ...  AppName = {param: exe_name | xyz} .exe

Más: www downloadatoz com / manual / in / inno-setup / topic_consts.htm

La respuesta anónima anterior debe ser upvote.

Pude pasar un argumento a mi instalador simplemente refiriéndome al parámetro por su nombre en el script:

{param:filePath|abc}

Y luego, al llamar al instalador, pase el valor del parámetro utilizando el formato requerido:

MyInnoSetup.exe /filePath=../foo.exe
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top