Inno setup 如何检查以静默模式发送的参数?

Inno setup 如何检查以静默模式发送的参数?,inno-setup,Inno Setup,在安装过程中,我将使用以下语法获取路径参数: myapp.exe /SILENT /LICENSE=hostname,port 许可证参数得到一个字符串,实际上我必须稍后将其分隔为两个字符串 如果许可证语法错误,我宁愿停止安装并让用户知道原因 我的问题是:如何验证这个参数(正则表达式?)以及如何告诉用户它是否错了 Thx您的意思是如何解析a)传递给安装程序的整个命令行,或b)仅解析/LICENSE参数 a) 使用函数ParamStr(索引:整数):字符串返回传递给安装程序或卸载程序的Index

在安装过程中,我将使用以下语法获取路径参数:

myapp.exe /SILENT /LICENSE=hostname,port
许可证参数得到一个字符串,实际上我必须稍后将其分隔为两个字符串

如果许可证语法错误,我宁愿停止安装并让用户知道原因

我的问题是:如何验证这个参数(正则表达式?)以及如何告诉用户它是否错了

Thx

您的意思是如何解析a)传递给安装程序的整个命令行,或b)仅解析/LICENSE参数

a) 使用函数ParamStr(索引:整数):字符串返回传递给安装程序或卸载程序的Index th命令行参数

还可以使用函数GetCmdTail:String将传递给安装程序或卸载程序的所有命令行参数作为单个字符串与函数ParamCount:Integer一起返回返回传递给安装程序或卸载程序的命令行参数数

b) Inno安装程序不支持正则表达式,请尝试以下简单验证:

function CheckLicenseHostPort(): Boolean;
var
  Correct: Boolean;
  Temp, Host, PortStr: String;
  CommaPos, Port: Integer;
begin
  Correct := False;
  Temp := ParamStr(3); // '/LICENSE=hostname,port'

  CommaPos := Pos('=', Temp);
  Temp := Copy(Temp, CommaPos + 1, 999); // 'hostname,port'

  CommaPos := Pos(',', Temp);

  if(CommaPos > 0) then
  begin    
    Host := Copy(Temp, 1, CommaPos - 1);
    PortStr := Copy(Temp, CommaPos + 1, Length(Temp) - CommaPos);

    // Here we suppose port must be number 0 - 9999
    if(Length(PortStr) > 0) then
    begin
      Port := StrToIntDef(PortStr, -123); // If there is problem with converting to integer return -123
      if(Port <> -123) then
        Correct := True;
     end;
  end;

  if(Correct) then
  begin
    // Port and Host contain correct values
  end;

  Result:= Correct;
end;
函数CheckLicenseHostPort():布尔值;
变量
正确:布尔值;
Temp,Host,PortStr:String;
逗号,端口:整数;
开始
正确:=错误;
温度:=ParamStr(3);/'/许可证=主机名,端口'
逗号:=Pos('=',Temp);
温度:=副本(温度,通信+1999);/'主机名,端口'
逗号:=Pos(',,Temp);
如果(逗号>0),则
开始
主机:=副本(临时,1,逗号-1);
PortStr:=复制(临时,逗号+1,长度(临时)-逗号);
//这里我们假设端口号必须是0-9999
如果(长度(PortStr)>0),则
开始
端口:=strotintdef(PortStr,-123);//如果转换为整数时出现问题,返回-123
如果(端口-123),则
正确:=正确;
结束;
结束;
如果(正确)那么
开始
//端口和主机包含正确的值
结束;
结果:=正确;
结束;

如果参数的具体形式为
/name=value
/name=“value可能带有空格”
,则您也可以使用
{param:name}
常量读取其值。在本例中,您仍然需要拆分主机名和端口,除非您将它们指定为两个单独的参数。。。谢谢此检查可以在
InitialiseSetup()
事件函数中完成,在该函数中可以报告问题并退出。