You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup Unicode版:注册表键存储Unicode字符语法咨询

在Inno Setup(Unicode版本)中向注册表写入特定Unicode字符的实现方案

刚好之前折腾过Inno Setup Unicode版本的注册表Unicode字符写入,给你几个直接能用的具体方案,覆盖不同场景:

1. 直接在脚本中编码Unicode字符(最常用)

官方文档提到的#$XXXX语法就是核心,XXXX是字符的十六进制Unicode码点。比如数学符号∑是U+2211,希腊字母α是U+03B1,你可以直接把这些编码拼进字符串,不管是在[Registry]段静态定义,还是在Code段动态生成。

静态写入([Registry]段)

直接在注册表项的ValueData里拼接编码:

[Registry]
; 写入∑和α到注册表字符串值
Root: HKCU; Subkey: "Software\MyApp\MathSettings"; ValueType: string; ValueName: "SymbolSet"; ValueData: "{#$2211} (求和符号) | {#$03B1} (阿尔法)"

动态写入(Code段)

如果需要逻辑判断或者动态生成字符串,用Pascal脚本实现:

procedure CurStepChanged(CurStep: TSetupStep);
var
  UnicodeContent: string;
begin
  // 在安装完成后写入注册表
  if CurStep = ssPostInstall then
  begin
    // 组合多个Unicode字符:∏(U+220F)+ 空格 + β(U+03B2)
    UnicodeContent := #$220F + ' ' + #$03B2;
    // 写入到指定注册表路径
    RegWriteStringValue(HKCU, 'Software\MyApp\MathSettings', 'DynamicSymbol', UnicodeContent);
  end;
end;

2. 从外部文本文件加载Unicode字符串

如果需要写入的Unicode字符很多,或者想单独维护字符内容,推荐用这个方法:

  1. 创建一个文本文件(比如unicode_symbols.txt),直接输入你需要的Unicode字符(比如∑、∏、α、β等),保存为UTF-8编码(带不带BOM都可以,Unicode版本的Inno Setup都能识别)。
  2. 在脚本的Code段加载文件内容并写入注册表:
procedure CurStepChanged(CurStep: TSetupStep);
var
  LoadedUnicodeStr: string;
begin
  if CurStep = ssPostInstall then
  begin
    // 从安装源目录加载文本文件
    if LoadStringsFromFile(ExpandConstant('{src}\unicode_symbols.txt'), LoadedUnicodeStr) then
    begin
      RegWriteStringValue(HKCU, 'Software\MyApp\MathSettings', 'FileBasedSymbol', LoadedUnicodeStr);
    end;
  end;
end;

3. 使用自定义消息常量(适合多语言场景)

如果你的安装包需要支持多语言,或者想把Unicode字符集中管理,用{cm:...}常量:

  1. 在[CustomMessages]段定义包含Unicode字符的消息:
[CustomMessages]
; 直接在这里写Unicode字符即可,只要脚本保存为UTF-8编码
MathSymbolCollection=∑ 求和 | ∏ 乘积 | α 阿尔法 | β 贝塔
  1. 在[Registry]段直接引用这个常量:
[Registry]
Root: HKCU; Subkey: "Software\MyApp\MathSettings"; ValueType: string; ValueName: "MultiLangSymbol"; ValueData: "{cm:MathSymbolCollection}"

关键注意事项

  • 确保你的.iss脚本文件保存为UTF-8编码(带BOM),这样Inno Setup才能正确识别脚本中直接输入的Unicode字符,避免乱码。
  • 注册表的ValueType选择string即可,在Unicode版本的Inno Setup中,这会自动写入REG_UNICODE_SZ类型的注册表值,完美支持Unicode字符。
  • 对于超出基本多语言平面的字符(比如emoji😀,码点U+1F600),用#$1F600的编码方式依然有效,Unicode版本的Inno Setup完全支持这类字符。

内容的提问来源于stack exchange,提问作者LaG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:31:33