Le compilateur Inno Setup "ne peut pas trouver le chemin spécifié" erreur avec de longs chemins

j'utilise un .iss script pour construire un exe le fichier à l'intérieur de Inno Setup Compiler. J'ai besoin d'emballage node_modules dans cette application, donc j'ai une ligne de sous [Files] qui ressemble à ceci:

Source: "{#SourcePath}Encore.Warehouse.UIbinWarehouse_Releasewarehouse*"; 
    DestDir: "{app}warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs

Quand je compile, je reçois cette erreur:

The system cannot find the path specified.

Voici la sortie du compilateur:

Compiler Output

Donc, il pour être en cours d'exécution fine jusqu'à ce qu'il est interrompu. Ma première pensée a été que le browser.js n'existe pas, mais après vérification, ce n'est pas le cas. Aussi, j'utilise un joker dans le chemin source donc le compilateur connaît le fichier existe, mais il semble avoir du mal à le comprimer.

Une autre chose que est à l'origine du problème est la longueur du chemin du fichier. Les modules de noeuds finissent généralement par avoir chemin du fichier ridicule d'une longueur de dû à des dépendances imbriquées. Dans ce cas, la longueur du chemin est 260. En supposant que c'est ce qui cause le problème, est-il un moyen de le contourner?

9
demandé sur Martin Prikryl 2016-08-05 15:46:36

1 réponses

c'est certainement dû à un long chemin. Normalement, les applications Windows ne peuvent pas traiter les chemins plus longtemps que MAX_PATH (260 caractères maximum).

Voir Nommage des Fichiers, des Chemins et des espaces de noms sur le MSDN.

une solution courante consiste à préfixer le chemin avec Source l'attribut. Il recherche : et il n'accepte que le chemin qui ont une lettre de commande seulement avant le : ou utiliser compiler: ou userdocs: préfixes.

vous pouvez Hacker cela en utilisant un chemin UNC avec un identifiant de volume (donc pas de deux points).

mountvol commande pour trouver le chemin UNC pour votre lecteur source.

Et puis vous avez le même problème avec un long chemin avec la DestDir l'attribut, lors de l'installation (pas lors de la compilation). Là, il n'y a pas de problème avec le côlon, donc vous pouvez simplement utiliser le \?\ préfixe.

Source: "\?\Volume{bb919c3e-bdb1-42b8-9601-6715becd8683}\{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \
    DestDir: "\?\{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs

bien sûr, si le problème est causé par un chemin racine étant déjà trop long, vous pouvez corriger le problème en déplaçant simplement les fichiers source vers un dossier avec un chemin plus court. Ou vous pouvez utiliser subst pour créer un lecteur virtuel ou vous pouvez créer une jonction symlink/directory.

6
répondu Martin Prikryl 2018-08-26 07:15:00