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;