如何将[setup]中的AppID内容转换为[code]中的字符串?

时间:2013-11-16 17:15:22

标签: inno-setup

当我使用INNO向导时,我得到一个* .iss文件,其中包含设置部分:

[Setup]
AppId={87E1AD40-F32B-4EF7-A2FF-5B508814068A}

<statements not included here}

然后我在代码部分添加一个过程,用于生成* .ini文件以用作我的应用程序的输入。代码部分包含以下内容:

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
 // Purpose: write an *.ini file
 //    Used as input to the program to be executed
 var
   S: string;
 begin
   if CurStep = ssPostInstall then
   begin
     //* Output language entered
     S := Format('[%s]'+#13#10, ['LANGUAGE']);
     SaveStringToFile(ExpandConstant('{app}\UserInputs.ini'), S, False);
     S := Format('language = %s'+#13#10, [ActiveLanguage]);
     SaveStringToFile(ExpandConstant('{app}\UserInputs.ini'), S, True);      

     <code not included here>

     //* Output AppId code generated by INNO
     S := Format('[%s]'+#13#10, ['REGISTRATION']);  // key word
     SaveStringToFile(ExpandConstant('{app}\UserInputs.ini'), S, True);
     // S := Format(??)
     //SaveStringToFile(ExpandConstant('{app}\UserInputs.ini'), S, True);
  end;
end;

如何格式化AppId以便S包含“87E1AD40-F32B-4EF7-A2FF-5B508814068A”[即S:=格式(??)]?

1 个答案:

答案 0 :(得分:3)

如果要在代码中展开某些[Setup]部分设置,可以使用SetupSetting预处理器功能。在您提出的问题中,您提到要获取AppId指令值,该值已设置为包含{}字符的GUID值,您希望在输出中删除该值。以下脚本显示了如何获取AppId指令值以及如何仅复制包含{}字符的部分的部分:

[Setup]
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A}
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program

[Code]
procedure InitializeWizard;
var
  S: string;
begin
  S := '{#SetupSetting("AppId")}';
  S := Copy(S, 3, Length(S) - 3);
  MsgBox(S, mbInformation, MB_OK);
end;