如何检查以静默方式发送的参数?

时间:2014-02-06 19:17:54

标签: inno-setup

在安装期间i除了使用以下语法获取PATH参数:

myapp.exe /SILENT /LICENSE=hostname,port

LICENSE参数获取一个字符串,实际上我必须稍后将其分隔为两个字符串。

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

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

THX

1 个答案:

答案 0 :(得分:2)

你的意思是如何解析a)传递给setup的整个命令行或b)只是/ LICENSE参数?

a)使用函数 ParamStr(Index:Integer):String; 返回传递给Setup或Uninstall的Index-th命令行参数。

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

b)Inno Setup不支持正则表达式,所以请尝试这个简单的验证:

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;