MSI APIs 不支持长文件名 - 如何缩短文件名?
MSI APIs does not support long filenames - How to shorten the file name?
我正在使用 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 项目时收到 找不到文件的错误。
我已经把我的项目移到C盘了。
现在:var.BasePath = "C:\Client\"
错误已解决。但问题是,修复它的更好方法是什么?我不想将项目移动到 C 盘。我相信一定有办法缩短 wix
中的文件长度。如果可以,我该怎么做?
NTFS Policy: This I have never tried, but in recent versions of Windows 10 (Version 1607 and up apparently
- run "winver.exe
") there is a new NT / group policy that you can try. The policy is: Enable NTFS long paths
.
Local Drives: Enable the policy (procedure below) and perhaps do a reboot
. Then remember to use local NTFS drives
- preferring the system drive I'd say. Let us know the results? (just a quick comment?).
仅构建时:鉴于您需要这些路径来编译和构建而不是安装,这可能有用吗? 不过你需要小心,否则你的包可能包含太长的路径以安装下游(可能无法编译,我不确定)。您需要非常好的 QA - 显然。老实说,我会回到 Windows 7
- 真正测试一下。
描述: "启用 NTFS 长路径将允许显示 win32 应用程序和 Windows 存储应用程序访问超出每个节点正常 260 个字符限制的路径。"
启动条件:防止在不受支持的系统(无论出于何种原因)上安装的通用机制是 MSI's launch conditions concept。
策略:gpedit.msc:设置组策略(NB! Only PRO version of Windows I think!
):
- 按Windows键并点击R ,键入
gpedit.msc
并按 Enter.
- 转到:
Local Computer Policy
=>
Computer Configuration
=>
Administrative Templates
=>
System
=>
Filesystem
.
- 双击
Enable NTFS long paths
选项。启用它。
Disclaimer! Side effects unknown.
简化标记:还有一件事。在主观意见中,我发现 WiX 标记在很多方面都略微 over-complicated。 WiX 的作者通过允许 auto-generation 的“样板属性”(如果这是一个术语)将工具包带向了一个有趣的方向。请参阅此答案以获取更多信息:Syntax for guids in WIX?
这里是 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>
链接:
我正在使用 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 项目时收到 找不到文件的错误。
我已经把我的项目移到C盘了。 现在:var.BasePath = "C:\Client\"
错误已解决。但问题是,修复它的更好方法是什么?我不想将项目移动到 C 盘。我相信一定有办法缩短 wix
中的文件长度。如果可以,我该怎么做?
NTFS Policy: This I have never tried, but in recent versions of Windows 10 (
Version 1607 and up apparently
- run "winver.exe
") there is a new NT / group policy that you can try. The policy is:Enable NTFS long paths
.Local Drives: Enable the policy (procedure below) and perhaps do a
reboot
. Then remember to uselocal NTFS drives
- preferring the system drive I'd say. Let us know the results? (just a quick comment?).
仅构建时:鉴于您需要这些路径来编译和构建而不是安装,这可能有用吗? 不过你需要小心,否则你的包可能包含太长的路径以安装下游(可能无法编译,我不确定)。您需要非常好的 QA - 显然。老实说,我会回到 Windows 7
- 真正测试一下。
描述: "启用 NTFS 长路径将允许显示 win32 应用程序和 Windows 存储应用程序访问超出每个节点正常 260 个字符限制的路径。"
启动条件:防止在不受支持的系统(无论出于何种原因)上安装的通用机制是 MSI's launch conditions concept。
策略:gpedit.msc:设置组策略(NB! Only PRO version of Windows I think!
):
- 按Windows键并点击R ,键入
gpedit.msc
并按 Enter. - 转到:
Local Computer Policy
=>
Computer Configuration
=>
Administrative Templates
=>
System
=>
Filesystem
. - 双击
Enable NTFS long paths
选项。启用它。
Disclaimer! Side effects unknown.
简化标记:还有一件事。在主观意见中,我发现 WiX 标记在很多方面都略微 over-complicated。 WiX 的作者通过允许 auto-generation 的“样板属性”(如果这是一个术语)将工具包带向了一个有趣的方向。请参阅此答案以获取更多信息:Syntax for guids in WIX?
这里是 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>
链接: