我从light.exe
收到错误,表示在我的设置项目中找到其中一个文件时遇到问题。结果证明我使用的相对路径超过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本身的限制,而是构建了API Wix设计利用的方式的基本限制,但是我需要一个问题的解决方案,这将允许我在我的问题中解决这个问题。 .wxs
个文件。是缩短路径会起作用,但问题不在于路径太长(因为它不是),而是相对路径的语法会增加不必要的中间部分。
答案 0 :(得分:4)
今天light.exe
中没有任何内容可以自定义评估路径,以便当整个事物超过260个字符时Path.Combine()不会阻塞。正如您所注意到的,这是.NET Framework中令人沮丧的限制(并且Windows Installer API也会窒息)。
要解决此问题,我建议您查看bind paths
。您可以将代码更改为:
<File Id='FoobarEXE' Source='!(bindpath.FooBarApp)\FoobarAppl10.exe' />
在命令行上执行以下操作:
light.exe -b FooBarApp=D:\Path\To\ProjectFolder\Path\To\Built\Executable
这将创建最短的路径。您也可以将相对路径从命令行移动到File/@Source
(例如,移动路径的Built\Executable
部分)。我想你会发现它非常灵活。
答案 1 :(得分:1)
.NET MAXPATH限制现已在版本4.6.2(https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/#bcl)
中得到解决