.net - WIX 相对路径最终变得太长

标签 .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'/>

我遇到的问题是 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/

相关文章:

c# - 订阅后添加可观察序列

c# - 在 ZipArchive C# .Net 4.5 中创建目录

c++ - 如何以编程方式确定网卡是虚拟网卡?

c# - 写入文件系统。如何有效锁定

c# - 如何在 C# 中的运行时实现带参数的静态字典<T>?

.net - Entity Framework : Can't use "Contains" with property on another object

java - 我想添加一个状态栏,该状态栏应出现在显示器屏幕的底部,随显示器尺寸的变化而变化

c# - Windows 的键值数据库?

powershell - 我怎样才能找到递归操作的确切位置?

c - 在 FUSE 中更改目录时调用哪个函数?