现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

Inno[Code]代码段获取[Setup]段关键字值的方法

2013-09-17 23:03 工业·编程 ⁄ 共 873字 ⁄ 字号 暂无评论

在[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++的可能会很熟悉这种感觉:"\\"与“\”的用法区分

给我留言

留言无头像?