setup inno descargar command-line inno-setup command-line-arguments

command line - descargar - ¿Es posible aceptar parámetros de línea de comando personalizados con Inno Setup



inno setup descargar (8)

Además de la respuesta de @DanLocks, la constante {param: ParamName | DefaultValue } está documentada cerca de la parte inferior de la página Constantes:

http://www.jrsoftware.org/ishelp/index.php?topic=consts

Me pareció bastante útil para suprimir opcionalmente la página de licencia. Aquí está todo lo que necesitaba agregar (usando Inno Setup 5.5.6 (a)):

[code] { If there is a command-line parameter "skiplicense=true", don''t display license page } function ShouldSkipPage(PageID: Integer): Boolean; begin Result := False if PageId = wpLicense then if ExpandConstant(''{param:skiplicense|false}'') = ''true'' then Result := True; end;

Estoy preparando un instalador con Inno Setup. Pero me gustaría agregar parámetros de línea de comando personalizados adicionales (ninguno de los parámetros disponibles) y me gustaría obtener el valor del parámetro, como:

setup.exe /do something

Compruebe si se da /do , luego obtenga el valor de algo. ¿Es posible? ¿Cómo puedo hacer esto?


Con InnoSetup 5.5.5 (y quizás otras versiones), solo pase lo que quiera como parámetro, con el prefijo a /

c:/> myAppInstaller.exe /foo=wiggle

y en su myApp.iss:

[Setup] AppName = {param:foo|waggle}

El |waggle proporciona un valor predeterminado si no coincide ningún parámetro. La configuración Inno no distingue entre mayúsculas y minúsculas. Esta es una forma particularmente agradable de manejar opciones de línea de comando: simplemente comienzan a existir. Desearía que hubiera una manera tan ingeniosa de dejarles saber a los usuarios qué parámetros de línea de comando le interesan al instalador.

Por cierto, esto hace que las respuestas de @knguyen y @ steve-dunn sean algo redundantes. Las funciones de utilidad hacen exactamente lo que hace la sintaxis {param:} incorporada.


En respuesta a:

"Con InnoSetup 5.5.5 (y tal vez otras versiones), simplemente pase lo que quiera como parámetro, con el prefijo" / "" @NickG, sí, cada constante puede expandir mediante la función ExpandConstant "

  • Este no es el caso. Intentar utilizar un parámetro de línea de comando en ExpandConstant en InnoSetup 5.5.6 da como resultado un error de tiempo de ejecución.

PD: Hubiera agregado un comentario directamente pero aparentemente no tengo suficiente "reputación"


Encontré la respuesta: GetCmdTail.


Esta es la función que escribí, que es una mejora de la respuesta de Steven Dunn. Puedes usarlo como:

c:/MyInstallDirectory>MyInnoSetup.exe /myParam="parameterValue"

myVariable := GetCommandLineParam(''/myParam'');

{ util method, equivalent to C# string.StartsWith } function StartsWith(SubStr, S: String): Boolean; begin Result:= Pos(SubStr, S) = 1; end; { util method, equivalent to C# string.Replace } function StringReplace(S, oldSubString, newSubString: String): String; var stringCopy: String; begin stringCopy := S; { Prevent modification to the original string } StringChange(stringCopy, oldSubString, newSubString); Result := stringCopy; end; { ================================================================== } function GetCommandlineParam(inParamName: String): String; var paramNameAndValue: String; i: Integer; begin Result := ''''; for i := 0 to ParamCount do begin paramNameAndValue := ParamStr(i); if (StartsWith(inParamName, paramNameAndValue)) then begin Result := StringReplace(paramNameAndValue, inParamName + ''='', ''''); break; end; end; end;


Puede pasar parámetros a sus scripts de instalador. Instale el preprocesador de configuración de Inno y lea la documentación sobre cómo pasar parámetros de línea de comandos personalizados.


Sí, es posible, puede usar la función ParamStr en PascalScript para acceder a todos los parámetros de la línea de comandos. La función ParamCount le dará el número de parámetros de la línea de comandos.

Otra posibilidad es usar GetCmdTail


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

c:/MyInstallDirectory>MyInnoSetup.exe -myParam parameterValue

Luego puede llamar a GetCommandLineParam de esta manera donde 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 arry 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;