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

Bir*_*y40 5 inno-setup

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

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

<statements not included here}
Run Code Online (Sandbox Code Playgroud)

然后我在代码部分添加一个过程,用于生成一个 *.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;
Run Code Online (Sandbox Code Playgroud)

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

TLa*_*ama 5

如果要扩展[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;
Run Code Online (Sandbox Code Playgroud)