WIX相对路径最终过长

Ear*_*ven 3 .net windows filesystems wix

我收到错误消息light.exe,表明在我的安装项目中找到文件之一时出现问题。在有问题的PC上发现我正在使用的相对路径超过260个字符。目前,Wix设置如下:

<File Id='FoobarEXE' Name='FoobarAppl10.exe' DiskId='1' Source='..\..\Path\To\Built\Executable\FoobarAppl10.exe' KeyPath='yes'/>
Run Code Online (Sandbox Code Playgroud)

我的问题是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文件中修复此问题。是的,缩短路径是可以的,但是问题实际上不是路径太长(因为不是),而是相对路径的语法添加了不必要的中间部分。

Rob*_*ing 5

light.exe如今,没有任何东西可以自定义评估路径,因此当整个字符超过260个字符时,Path.Combine()不会阻塞。正如您所注意到的,这是.NET Framework中令人沮丧的局限性(Windows Installer API也将令人窒息)。

要变通解决此问题,我建议您调查一下bind paths。您可以将代码更改为:

<File Id='FoobarEXE' Source='!(bindpath.FooBarApp)\FoobarAppl10.exe' />
Run Code Online (Sandbox Code Playgroud)

在命令行上执行以下操作:

light.exe -b FooBarApp=D:\Path\To\ProjectFolder\Path\To\Built\Executable
Run Code Online (Sandbox Code Playgroud)

这将创建最短的路径。您也可以将相对路径从命令行移动到命令行File/@Source(例如,移动Built\Executable路径的一部分)。我认为您会发现它非常灵活。