【问题标题】:WIX relative path ends up being too longWIX 相对路径最终太长
【发布时间】:2013-03-15 11:26:46
【问题描述】:

我收到来自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 文件。是的,缩短路径会起作用,但问题不在于路径太长(因为它不是),而是相对路径的语法添加了不必要的中间部分。

【问题讨论】:

    标签: .net windows filesystems wix


    【解决方案1】:

    今天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 部分)。我想你会发现它非常灵活。

    【讨论】:

    • 我一直在做类似的事情,但使用了 Source='$(var.FooBarApp)\FoobarAppl10.exe' 这样的 WiX 预处理器变量。两种方式都有显着差异,还是仅与使用 msbuild 有关?
    • 与 MSBuild 无关。只有当变量被解析并且您会发现绑定路径更加强大时,尤其是在修补或分布式构建等高级场景中。
    • 谢谢 - 我会调查一下,看起来它会解决我的问题。干杯!
    • 我一直在查看sourceforge 的绑定路径文档,但我有点困惑如何在我的.wxs 中定义它 - 有没有讨论这个的地方?谢谢!
    • 它不在您的 .wxs 文件中,您在命令行中将它们设置为 light.exe。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2016-12-30
    • 2018-12-16
    • 1970-01-01
    • 2015-08-25
    • 2016-09-05
    相关资源
    最近更新 更多