Avalie a macro do pré-processador no tempo de execução no Inno Setup Pascal Script

Estou usando uma diretiva Inno Setup #define para definir todas as informações sobre um pacote de software no meu instalador e outras diretivas para extrair partes dessa string. Por exemplo, usando o seguinte,PartNumber(Package1) retornará 05414.

#define Package1 "05414 - My Package"
#define PartNumber(str Package) Copy(Package, 1, 5)

Estou usando essa abordagem em scripts e código e funciona bem. No entanto, tenho uma situação em que seria conveniente gerar programaticamente a string e estou tendo problemas para fazê-la funcionar. Por exemplo, eu gostaria de fazer algo como o seguinte.

procedure Foo(Package: String);
var
  PartNumber: String;
begin
  PartNumber:= ExpandConstant(Format('{#PartNumber(%s)}', [Package]));
end;

procedure Bar();
begin
   Foo(ExpandConstant('{#Package1)}')); 
end;

oPackage argumento paraFoo está correto, mas recebo um erro do compilador dizendo

[ISPP] Nenhum argumento para o formato '%' ".

Parece que não gosta do# na corda noPartNumber linha. Mesmo incluindo um# em uma string normal gera um erro "diretiva de pré-processador não terminada", então acho que está interpretando o# como um especificador de precisão ou algo assim.

Existe uma maneira de fazê-lo tratar# como parte do texto para que eu possa expandir programaticamente essa constante? Se não, se existe alguma outra maneira de conseguir isso?

questionAnswers(1)

yourAnswerToTheQuestion