python - 在使用 PyInstaller 创建的应用程序上的 InnoSetup 中使用 GetStringFileInfo 时出现编译器错误

标签 python installation inno-setup pyinstaller fileversioninfo

我按照此处所述创建了版本信息文件 - 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/

相关文章:

windows - Inno Setup - 从需要特权的安装程序访问非特权帐户文件夹

python - Keras VGG16 ValueError : "Output of the generator should be tuple but got ' None'.“我该如何解决这个问题?

python - 无法在google colab中上传本地文件

python - 无法安装 jaxlib

c++ - 尝试在 Ubuntu 11.04 上安装 Boost 1.49 时跳过 <dir> 因为缺少 ... 错误

inno-setup - 用于复制文件夹的 Inno Setup 脚本

inno-setup - 如何将 java 设置与我的应用程序设置绑定(bind)?

python - 希望在 Python 中获得与在 Excel 中使用 TINV 相同的结果

python - np.around 用于没有值和整数值的数组

sql-server - 无法在 ubuntu 20 中安装 SQLserver 工具