将参数传递给.isl文件中定义的自定义消息

时间:2015-11-17 10:54:35

标签: inno-setup

我的更新必须弄清楚用户指定的目录中是否存在两个已知文件。如果不是,我想让他知道,这条路上没有文件。到目前为止,这是我所有.isl文件中的CustomMessage。 现在我想向他展示他用文件输入的完整路径。

到目前为止,消息如下所示:

  

在所选位置找不到File1,File2或两者....

我现在想要的是:

  

%1,%2或两者都找不到......

对于%1%2,我想传递完整的指定路径,但我看不到如何执行此操作。 ExpandConstant没有任何论据,到目前为止,我还没有发现如何将参数传递给自定义消息。

为澄清事情,请参阅以下代码:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ResultCode: Integer;
  ServerData : String;
  UseDatabase : String;
  Language : String;
  ResultCode : Integer;
  ExePath : String;
  ConfigFilePath : String;
begin
  Result := True;
  if CurPageID = wpSelectDir then begin
    if DirExists(ExpandConstant('{app}')) then begin
        MsgBox(ExpandConstant('{app}'),mbInformation,MB_OK);    
        UpdatePath := ExpandConstant('{app}');
        ExePath := UpdatePath+'\File1.exe';
        ConfigFilePath := UpdatePath+'\File2.exe.config'; 
        if FileExists(UpdatePath+'\File1.exe') and FileExists(UpdatePath+'\File2.exe.config') then begin
            RegPath := UpdatePath;
            UpdatePath := RegPath + '\Update-' + ExpandConstant('{#MyAppVersion}');
            ConfigPath := RegPath + '\File2.exe.config';
            DBPage.Values[0] := ExtractServerAddr(GetServerData(ConfigPath));
            DBPage.Values[1] := ExtractServerPort(GetServerData(ConfigPath));           
        end else begin
            MsgBox(ExpandConstant('{cm:DirPageFileNotFound,ExePath,ConfigFilePath}'),mbInformation,MB_OK);
            Result := False;
        end;
    end else begin
            MsgBox(ExpandConstant('{cm:DirPageDirectoryNotFound}'),mbInformation,MB_OK);
            Result := False;
    end;

2 个答案:

答案 0 :(得分:1)

在Pascal脚本中,您应该使用CustomMessageFmtMessage

FmtMessage(CustomMessage('DirPageFileNotFound'), [ExePath, ConfigFilePath])

它比组装{cm:MessageName,Arguments} "constant"更清晰,更不容易出错。如果任何路径中有任何逗号或大括号,Your syntax将会中断。

{cm:...}常量适用于非Code部分,例如:

[Run]
Filename: "myapp.exe"; Description: "{cm:RunningApp,myapp.exe}"; 

答案 1 :(得分:0)

嗯,解决方案尽可能简单:

ToExpand := '{cm:DirPageFileNotFound,' + ExePath +',' + ConfigFilePath + '}'
MsgBox(ExpandConstant(ToExpand),mbInformation,MB_OK);

这两条线就行了。

PS:我很感谢StackOverflow成为我的橡皮鸭。