我从 light.exe
收到错误,表明它在我的安装项目中定位其中一个文件时遇到问题。在有问题的 PC 上,我使用的相对路径超过了 260 个字符。目前 Wix 设置如下:
<File Id='FoobarEXE' Name='FoobarAppl10.exe' DiskId='1' Source='..\..\Path\To\Built\Executable\FoobarAppl10.exe' KeyPath='yes'/>
我遇到的问题是 Wix 安装项目位于 D:\Path\To\ProjectFolder\WixInstaller\WixInstallerProject
和 \Path\To\Built\等文件夹中Executable\FoobarAppl10.exe
存在于 D:\Path\To\ProjectFolder
文件夹下。当 light.exe
尝试解析路径时,最终结果为 D:\Path\To\ProjectFolder\WixInstaller\WixInstallerProject\..\..\Path\To\Built\Executable\FoobarAppl10.exe
在我的特定情况下恰好超过 260 个字符。 exe 的正确绝对路径是 D:\Path\To\ProjectFolder\Path\To\Built\Executable\FoobarAppl10.exe
,在我的例子中应该少于 260 个字符,但由于不必要地包含路径的 WixInstaller\WixInstallerProject\..\..\
部分,然后超过此限制。
有什么方法可以让 light.exe
将 ..\..\Path\To\Built\Executable\FoobarAppl10.exe
解析为 D:\Path\To\ProjectFolder\Path\To\Built\Executable\FoobarAppl10.exe
而不是 D:\Path\To\ProjectFolder\WixInstaller\WixInstallerProject\..\..\Path\To\Built\Executable\FoobarAppl10.exe
?
我明白这不是 Wix 本身的限制,更多的是 Wix 设计使用的 API 构建方式的潜在限制,但是我需要一个解决问题的方法,使我能够在我的.wxs
文件。是的,缩短路径会起作用,但问题不在于路径太长(因为它不是),而是相对路径的语法添加了不必要的中间部分。
最佳答案
目前 light.exe
中没有任何内容可以自定义评估路径,因此当整个内容超过 260 个字符时 Path.Combine() 不会阻塞。正如您所注意到的,这是 .NET Framework 中的一个令人沮丧的限制(并且 Windows Installer API 也会阻塞)。
要解决此问题,我建议查看绑定(bind)路径
。您可以将代码更改为:
<File Id='FoobarEXE' Source='!(bindpath.FooBarApp)\FoobarAppl10.exe' />
在命令行上执行如下操作:
light.exe -b FooBarApp=D:\Path\To\ProjectFolder\Path\To\Built\Executable
这将创建最短路径。您也可以将相对路径从命令行移动到 File/@Source
(例如,移动路径的 Built\Executable
部分)。我想您会发现它非常灵活。
关于.net - WIX 相对路径最终变得太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431210/