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

Python 在使用PyInstaller创建的应用程序上使用InnoSetup中的GetStringFileInfo时出现编译器错误,python,installation,inno-setup,pyinstaller,fileversioninfo,Python,Installation,Inno Setup,Pyinstaller,Fileversioninfo,我创建了如下所述的版本信息文件- 并获得包含所有版本信息的EXE文件 下一个问题是,当我尝试使用InnoSetup构建安装文件时,我遇到了一个错误: d:\installation\Source\setup\u script.iss中的第65行出错:缺少 参数“Name”的结束引号 第65行: [Icons] Name: "{group}\{#VerInfoProductName}"; Filename: "{app}\{#ExeFileName}.exe"; WorkingDir: "{app

我创建了如下所述的版本信息文件- 并获得包含所有版本信息的EXE文件

下一个问题是,当我尝试使用InnoSetup构建安装文件时,我遇到了一个错误:

d:\installation\Source\setup\u script.iss中的第65行出错:缺少 参数“Name”的结束引号

第65行:

[Icons]
Name: "{group}\{#VerInfoProductName}"; Filename: "{app}\{#ExeFileName}.exe"; WorkingDir: "{app}"
下面是VerInfoProductName的定义

#定义VerinforProductName GetStringFileInfo(AddBackslash(SourcePath)+.\..\dist\app\testapp.exe,“ProductName”)

附加详细信息。

应用程序版本信息字符串中有一些内容会混淆Inno Setup前置处理器。您的代码可以与其他应用程序一起使用

预处理器加载
ProductName
的方式使生成的变量实际上比值长,剩余的空间充满了一些垃圾,这会使编译器混淆

您可以通过使用
{SetupSetting('AppName')}
而不是
{verinfo产品名}
来解决此问题。当然,这是假设
AppName
设置为
{#verinfo产品名称}

另一种方法是通过INI文件往返字符串:

expr WriteIni(“C:\path\xxx.ini”、“xxx”、“xxx”、VerinforProductName) #定义VerinforProductName ReadIni(“C:\path\xxx.ini”、“xxx”、“xxx”)
实际上,在普通的Windows资源文件(
.rc
)中,必须显式地使用null终止版本信息字符串(注意
\0
):

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


您的
TestApp.exe
缺少第二个null。我可以在一个六边形垃圾堆里看到。我很确定这是问题的主要原因。

第65行更新了说明。谢谢请查看附件中的详细信息。你是对的。我没有检查预处理的脚本。当在不同的部分使用该变量时,脚本是可编译的,但是条目被剪切了。我也在考虑它。谢谢你们!需要调整python吗code@SpanishBoy不客气。考虑确认结果
VALUE "ProductName", "TestProductName\0"