inno setup-将文件路径作为命令行参数传递

时间:2015-07-01 15:19:12

标签: inno-setup pascal

我从主设置通过命令行传递一组参数,该命令行还包括文件路径并读取Subsetup中的值。命令行参数输出如下所示

/dir="D:\XXX.Web" /dbname="XXX" /dbinstancename="XXX" /dbsapwd="123!"#$%" /dataFileDirectory="D:\MSSQL10_50.XXX\MSSQL\DATA" /logFileDirectory="D:\MSSQL10_50.XXX\MSSQL\Log" /backupDirectory="E:\MSSQL10_50.XXX\MSSQL\Backup" /sqlCmdLocation="C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" /webappname="yyyy" /Nameservice="VVVV" /UserUsername="user"

我使用自定义的GetParameter函数获取Subsetup中的参数值,并存储在String中,如下所述......

// This is how I get the values and store in String
DBName := GetParameter('/dbname=', DBName);
DataFileDirectory := GetParameter('/dataFileDirectory=', DataFileDirectory);

// function to get the parameters from the commandline parameters
    function GetParameter(ParamName, Default: String): String;
var
    P, I: Integer;
begin
    Result := Default;
    if Length(ParamName) < 1 then Exit;
    ParamName := Lowercase(ParamName);
    for I := 2 to ParamCount() do begin
        P := pos(ParamName, Lowercase(ParamStr(I)));
        if P > 0 then begin
            P := P + Length(ParamName);
            Result := Copy(ParamStr(I), P, Length(ParamStr(I))+1-P);
            Result := Trim(RemoveQuotes(Trim(Result)));
            Exit;
        end;
    end;
end;

当我打印日志文件中的所有值时,我得到如下所述的输出。

    DBName = XXX
    DBSaPwd = ********
    DBInstanceName = XXX
    DataFileDirectory = D:\MSSQL10_50.XXX\MSSQL\DATA /logFileDirectory=D:\MSSQL10_50.XXX\MSSQL\Log /backupDirectory=E:\MSSQL10_50.XXX\MSSQL\Backup /sqlCmdLocation=C:\Program
    LogFileDirectory = D:\MSSQL10_50.XXX\MSSQL\Log /backupDirectory=E:\MSSQL10_50.XXX\MSSQL\Backup /sqlCmdLocation=C:\Program
    BackupDirectory = E:\MSSQL10_50.XXX\MSSQL\Backup /sqlCmdLocation=C:\Program
    SqlCmdLocation = C:\Program
    WebAppName = yyyy /Nameservice=VVVV /UserUsername=user /UserPassword=user /MSSQLServerSelection= /silent /restart=false

例如, DataFileDirectory 的文件路径值将采用下一个参数值,依此类推,以便随后抛出&#34; 文件名,目录名或卷标语法不正确&#34;设置执行结束时出错。

我相信必须使用转义序列来解决这个问题。请提供您的建议以解决此错误并正确实施。

提前致谢

节目播音员

0 个答案:

没有答案