2

J'ai créé le fichier info de version comme décrit ici - What does a "version file" look like? et j'ai un fichier EXE avec toutes les informations de version.Erreur de compilation lors de l'utilisation de GetStringFileInfo dans InnoSetup sur une application créée avec PyInstaller

Ma question est la suivante, lorsque je tente de construire le fichier de configuration avec InnoSetup, je reçois une erreur:

Error on line 65 in d:\installation\Source\setup_script.iss: Missing closing quote on parameter "Name"

ligne 65:

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

Définition de VerInfoProductName ci-dessous

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

Les détails sont attachés in archive.

+0

Description mise à jour avec la ligne 65. Merci! – SpanishBoy

+0

Veuillez trouver ci-joint les détails. – SpanishBoy

Répondre

2

Il y a quelque chose dans les chaînes d'informations de votre application qui confond le préprocesseur Inno Setup. Votre code fonctionne avec d'autres applications.

Le pré-processeur charge le ProductName d'une manière que la variable résultante est réellement plus longue que la valeur, l'espace restant rempli avec des déchets qui plus tard confond le compilateur. Vous pouvez contourner ce problème en utilisant {#SetupSetting('AppName')} au lieu de {#VerInfoProductName}. Cela suppose bien entendu que AppName est défini sur {#VerInfoProductName}.

Une autre façon consiste à aller autour de la chaîne via un fichier INI:

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

En fait, dans les fichiers normaux de ressources Windows (.rc), on doit explicitement nul mettre fin aux chaînes d'information de version (noter la \0):

VALUE "ProductName", "TestProductName\0" 

le caractère nul (\0) résultant est explicitement stocké dans le binaire résultant. Donc, à la fin, il y a deux caractères nuls dans le binaire résultant (quatre 0 octets en codage UTF-16). C'est un format WinAPI commun lorsque plusieurs valeurs sont autorisées. Le caractère nul est le séparateur de valeurs, le double-nul termine la séquence.

Votre TestApp.exe manque cette deuxième valeur nulle. Je peux le voir dans une décharge hexadécimale. Je suis à peu près sûr que c'est la principale cause de votre problème.

+0

Vous avez raison. J'ai manqué de vérifier le script prétraité. Le script était compilable lors de l'utilisation de cette variable dans une section différente, mais les entrées ont été coupées. – TLama

+0

J'y pensais aussi. Merci les gars! Besoin d'ajuster le code python – SpanishBoy

+0

@SpanishBoy Vous êtes les bienvenus. Pensez à confirmer les résultats sur [À quoi ressemble un "fichier de version"?] (Http://stackoverflow.com/a/14626175/850848) –