如何将包含ascii代码的字符串写入注册表?

时间:2015-01-14 14:09:01

标签: inno-setup

我需要在安装过程中将以下值写入注册表:

[Registry]
Root: HKCU; Subkey: "Software\Apt\TCM\Tables\Standard"; ValueType: string; ValueName: "Campaign planner"; ValueData: "Sent letter #1¦TOGGLE:TICK2¦1500\01Follow-up call¦TOGGLE:TICK2¦1500\01¦SPACE¦45\01Sent letter #2¦TOGGLE:TICK2¦1500\01Follow-up call¦TOGGLE:TICK2¦1500\01¦SPACE¦45\01Notes¦¦4000"

但它在哪里说" \ 01"我需要写ASCII字符01,所以输入如下:

enter image description here

我该怎么做?

1 个答案:

答案 0 :(得分:1)

一种方法可能是在编译时用StringChange函数替换\01序列的所有出现。虽然我找不到如何在不关闭Pascal样式字符串文字的情况下逃避SOH(ASCII字符1)的方法,但这将完成这项工作:

#pragma parseroption -p-

[Registry]
...; ValueData: "{#StringChange('Lorem ipsum\01dolor sit amet', '\01', '\x01')}"

但是,上面的代码看起来过于复杂。如果您不介意所有反斜杠转义字符将评估为其相应的字符,您可以定义一个将转义它们的变量:

#pragma parseroption -p-
#define MyValue "Lorem ipsum\01dolor sit amet"

[Registry]
...; ValueData: "{#MyValue}"

但请注意,它适用于所有反斜杠转义字符,例如\02\03及其各自的符号,这些符号可能并不总是适合您的常量值。

尽管如此,作为最可靠的方式,我发现使用代码部分及其StringChangeEx函数。