2013-03-15 5 views
3

Je reçois des erreurs de light.exe qui indiquent qu'il rencontre des problèmes pour localiser l'un des fichiers dans mon projet d'installation. Il s'avère sur le PC en question que le chemin relatif que j'utilise dépasse 260 caractères. À l'heure actuelle Wix est mis en place quelque chose comme ceci:Le chemin relatif de WIX finit par être trop long

<File Id='FoobarEXE' Name='FoobarAppl10.exe' DiskId='1' Source='..\..\Path\To\Built\Executable\FoobarAppl10.exe' KeyPath='yes'/> 

Le problème que j'ai est que le projet Wix installation se trouve dans un dossier tel que D:\Path\To\ProjectFolder\WixInstaller\WixInstallerProject et \Path\To\Built\Executable\FoobarAppl10.exe existe dans le dossier D:\Path\To\ProjectFolder. Lorsque light.exe tente de résoudre le chemin, le résultat net est D:\Path\To\ProjectFolder\WixInstaller\WixInstallerProject\..\..\Path\To\Built\Executable\FoobarAppl10.exe, ce qui, dans mon cas particulier, dépasse 260 caractères. Le chemin absolu correct pour l'exe serait D:\Path\To\ProjectFolder\Path\To\Built\Executable\FoobarAppl10.exe ce qui dans mon cas serait inférieur à 260 caractères, mais en raison de l'inclusion inutile de la partie WixInstaller\WixInstallerProject\..\..\ du chemin, il dépasse alors cette limite.

Est-il possible que je puisse obtenir light.exe pour résoudre ..\..\Path\To\Built\Executable\FoobarAppl10.exe comme D:\Path\To\ProjectFolder\Path\To\Built\Executable\FoobarAppl10.exe au lieu de D:\Path\To\ProjectFolder\WixInstaller\WixInstallerProject\..\..\Path\To\Built\Executable\FoobarAppl10.exe? J'apprécie que ce n'est pas une limitation dans Wix en soi, plus d'une limitation sous-jacente dans la façon dont les API Wix sont conçues pour utiliser sont construites, mais j'ai besoin d'une solution au problème qui me permettra de résoudre ce problème mon fichier .wxs. Oui raccourcir le chemin fonctionnerait mais le problème n'est pas vraiment que le chemin est trop long (parce qu'il ne l'est pas), c'est que la syntaxe pour les chemins relatifs ajoute la section centrale inutile.

Répondre

4

Il n'y a rien dans light.exe aujourd'hui qui évaluera le chemin personnalisé afin que Path.Combine() ne s'étouffe pas lorsque le tout dépasse 260 caractères. Comme vous le constatez, il s'agit d'une limitation frustrante dans .NET Framework (et les API de Windows Installer se bloqueront également). Pour contourner le problème, je recommanderais bind paths. Vous pouvez changer votre code pour être quelque chose comme:

<File Id='FoobarEXE' Source='!(bindpath.FooBarApp)\FoobarAppl10.exe' /> 

La sur la ligne de commande faire quelque chose comme:

light.exe -b FooBarApp=D:\Path\To\ProjectFolder\Path\To\Built\Executable 

Cela va créer les chemins les plus courts. Vous pouvez également déplacer les chemins relatifs de la ligne de commande vers le File/@Source (par exemple, déplacez la partie Built\Executable du chemin). Je pense que vous trouverez que c'est très flexible.

+0

Je fais quelque chose de semblable depuis longtemps, mais avec des variables pré-processeur WiX comme 'Source = '$ (var.FooBarApp) \ FoobarAppl10.exe''. Y a-t-il une différence significative entre les deux, ou est-ce que cela a juste à voir avec l'utilisation de msbuild ou pas? –

+0

Rien à voir avec MSBuild. C'est juste au moment où les variables sont résolues et vous trouverez les chemins de liaison sont beaucoup plus puissants, en particulier dans les scénarios avancés comme les correctifs ou les versions distribuées. –

+0

Merci - Je vais regarder dans cela, il semble que cela va résoudre mon problème. À votre santé! –