首页 > 解决方案 > MSI API 不支持长文件名 - 如何缩短文件名?

问题描述

Wix用来生成MSI

Wix 正在ComponentsGenerated.wxs从项目参考动态生成文件。

项目中的 DLL 之一具有最长的名称,如下所示

  <Component Id="D5CF013A7A8C3FB9D1BD48B1996555DA" 
             Guid="{CBDB1BC0-F4EE-4824-B937-D9F66278F89A}">
     <File Id="8EDDC3C71F9C124B466555A59378747" 
            KeyPath="yes" Source="$(var.BasePath)\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll" />
   </Component>

这里: var.BasePath = "C:\Work\Projects\WixProjects\InstallerProjects\Client"

因此,当我尝试构建 Wix 项目时,我收到了file not found 错误。

我已将我的项目移至 C 盘。现在:var.BasePath = "C:\Client\"

错误得到解决。但问题是,修复它的更好方法是什么?我不想将项目移动到 C 盘wix我相信必须有一种方法可以缩短文件的长度。如果是,我该怎么做?

标签: wixwindows-installerwix3.5wix3.7wix3.6

解决方案


NTFS 策略:我从未尝试过,但在最新版本的 Windows 10(Version 1607 and up apparently-运行“winver.exe”)中,您可以尝试新的 NT/组策略。政策是:Enable NTFS long paths

本地驱动器:启用策略(下面的过程)并可能执行reboot. 然后记得使用local NTFS drives- 我会说更喜欢系统驱动器。让我们知道结果?(只是快速评论?)。

仅构建时间看到您需要这些路径来编译和构建而不是安装,这可能有效吗?不过你需要小心,否则你的包可能包含太长的路径来安装下游(可能无法编译,我不确定)。你需要非常好的质量保证——显然。Windows 7老实说,我会回过头来

描述 “启用 NTFS 长路径将允许已显示的 win32 应用程序和 Windows Store 应用程序访问超出每个节点正常 260 字符限制的路径。”

启动条件:防止在不受支持的系统上安装(无论出于何种原因)的通用机制是MSI 的启动条件概念

策略:gpedit.msc:设置组策略(NB! Only PRO version of Windows I think!):

  1. Windows键并点按R,键入gpedit.msc并按Enter
  2. 前往:。Local Computer Policy => Computer Configuration => Administrative Templates => System => Filesystem
  3. 双击该Enable NTFS long paths选项。启用它。

免责声明!副作用未知。

NTFS 政策


简化标记:还有一件事。在主观意见中,我发现 WiX 标记对于许多事情来说有点过于复杂。WiX 的作者通过允许自动生成“样板属性”(如果这是一个术语)将工具包带向了一个有趣的方向。请参阅此答案以获取更多信息: WIX 中 guid 的语法?

这是一个示例simplified WiX markup

<!-- Sample guid below, do not copy paste -->
<Component Id="File.dll" Guid="{12345678-1234-1234-1234-123456789ABC}">
  <File Id="File.dll" Name="File.dll" KeyPath="yes" Source="..\File.dll" />
</Component>

相对

<Component>
  <File Source="..\File.dll" />
</Component>

链接


推荐阅读