在[Code]字段这样写 使用Inno制作安装包,活用[Code]字段的代码可实现很多功能,在编写Pascal代码时,可能会用到[Setup]字段的先的一些关键字,如:AppId={{30E1A3ED-7869-4C99-A426-D331A221234A},可能你会需要获得这个GUID字符串来执行卸载
在stackoverflow上搜索一下,找到了答案:
http://stackoverflow.com/questions/1926164/innosetup-getting-appname-in-code-section
大致三种方法:
1.比较“笨”的方法,定义一个常量来保存这个AppId的值
#define AppName "{30E1A3ED-7869-4C99-A426-D331A221234A}"
[Setup]字段这样写
AppName={#AppName}
[Code]字段
MyString :=ExpandConstant(‘ {#AppName}’);
2.使用#emit预处理器
在[Code]字段这样写 MyString := ExpandConstant('{#emit SetupSetting("AppId")}'); MyString的值会是{30E1A3ED-7869-4C99-A426-D331A221234A}
3.最简洁的方法?
在[Code]字段这样写 MyString := '{#SetupSetting("AppId")}',MyString的值会是{{30E1A3ED-7869-4C99-A426-D331A221234A} 注意会比方法二前面多一个‘{’
方法二和方法三基本相同,差距在于获得的字符串前面有几个大括号
Inno的语法中,大括号应该是一种通配符,在定义AppId={{30E1A3ED-7869-4C99-A426-D331A221234A},前面两个大括号实际代表一个大括号,删除一个后,编译会报错
因此,使用方法三时需要注意,实际上该方法获得的值并不正确,常使用C++的可能会很熟悉这种感觉:"\\"与“\”的用法区分