我按照此处所述创建了版本信息文件 - What does a "version file" look like? 并获得包含所有版本信息的 EXE 文件。
我的问题是,当我尝试使用 InnoSetup 构建安装文件时,出现错误:
Error on line 65 in d:\installation\Source\setup_script.iss: Missing closing quote on parameter "Name"
第 65 行:
[Icons]
Name: "{group}\{#VerInfoProductName}"; Filename: "{app}\{#ExeFileName}.exe"; WorkingDir: "{app}"
下面VerInfoProductName
的定义
#define VerInfoProductName GetStringFileInfo(AddBackslash(SourcePath) + "..\..\dist\app\testapp.exe", "ProductName")
详情附后in archive .
最佳答案
应用程序版本信息字符串中的某些内容会使 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
) 中,必须显式以 null 终止版本信息字符串(请注意 \0
):
VALUE "ProductName", "TestProductName\0"
生成的空 (\0
) 字符显式存储在生成的二进制文件中。因此最终生成的二进制文件中有两个空字符(UTF-16 编码中的四个 0 字节)。当允许多个值时,这是常见的 WinAPI 格式。空字符是值分隔符,双空字符终止序列。
您的 TestApp.exe
缺少第二个 null。我可以在十六进制转储中看到这一点。我很确定这是导致您问题的主要原因。
关于python - 在使用 PyInstaller 创建的应用程序上的 InnoSetup 中使用 GetStringFileInfo 时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341371/