在安装期间i除了使用以下语法获取PATH参数:
myapp.exe /SILENT /LICENSE=hostname,port
LICENSE参数获取一个字符串,实际上我必须稍后将其分隔为两个字符串。
如果LICENSE语法错误,我宁愿停止安装并让用户知道原因。
我的问题是:如何验证这个参数(正则表达式?)以及如何告诉用户它是否错误?
THX
答案 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;