2

我按照此处所述创建了版本信息文件- “版本文件”是什么样的? 并得到包含所有版本信息的 EXE 文件。

接下来是我的问题,当我尝试使用 InnoSetup 构建安装文件时,出现错误:

d:\installation\Source\setup_script.iss 中的第 65 行出错:参数“名称”上缺少右引号

第 65 行:

[Icons]
Name: "{group}\{#VerInfoProductName}"; Filename: "{app}\{#ExeFileName}.exe"; WorkingDir: "{app}"

VerInfoProductName下面的定义

#define VerInfoProductName GetStringFileInfo(AddBackslash(SourcePath) + "..\..\dist\app\testapp.exe", "ProductName")

详细信息附在档案中

4

1 回答 1

2

您的应用程序版本信息字符串中有一些东西会混淆 Inno Setup 预处理器。您的代码适用于其他应用程序。

预处理器ProductName以结果变量实际上比值长的方式加载,剩余空间充满了一些垃圾,这些垃圾后来使编译器感到困惑。

您可以通过使用{#SetupSetting('AppName')}而不是{#VerInfoProductName}. 这当然假设AppName设置为{#VerInfoProductName}

另一种方法是通过 INI 文件来回传输字符串:

#expr WriteIni("C:\path\xxx.ini", "xxx", "xxx", VerInfoProductName)
#define VerInfoProductName ReadIni("C:\path\xxx.ini", "xxx", "xxx")

实际上,在普通的 Windows 资源文件 ( .rc) 中,必须显式地以空值终止版本信息字符串(注意\0):

VALUE "ProductName", "TestProductName\0"

生成的 null ( \0) 字符显式存储在生成的二进制文件中。所以最后在生成的二进制文件中有两个空字符(UTF-16 编码中有四个 0 字节)。当允许多个值时,这是常见的 WinAPI 格式。空字符是值分隔符,双空字符终止序列。

TestApp.exe缺少第二个空值。我可以在十六进制转储中看到这一点。我很确定这是您问题的主要原因。

于 2015-03-30T13:06:38.250 回答