繁体   English   中英

如何为长路径名使用NSIS Unicode \\\\?\\前缀

[英]How to use NSIS Unicode \\?\ prefix for long pathnames

我正在使用NSIS创建安装程序,但是路径名较长(> 260个字符)有问题。 我听说过unicode版本,该版本可以处理带有特殊前缀\\\\?\\长路径名。 我想知道是否有任何文档描述\\\\?\\前缀的用途以及使用方式。 我在非Unicode NSIS版本中使用File /r /x root ..*

此处描述了相同的问题,但是增加了“允许的文件路径长度”,但没有实际解决方案。

操作系统是Windows 7,错误消息是

File: failed opening file "..\server\WEB-INF\classes\some\very\long\and\winding\path\myFile.txt"
Error in script "D:\real\long\path\to\nsis\my.nsis.updater.nsi" on line 116 -- aborting creation process

这条线是

File /r /x nsis ..\*

打包了我的内容。

Unicode NSIS分支对长路径提供了一些支持,但是我不确定File的编译器部分是否是其中之一。

NSIS官方不支持长路径的原因有两个:

  • \\\\?\\前缀告诉Windows在用户模式下根本不解析路径,因此您将失去对相对路径的支持。 然后,我们将不得不在具有相对路径支持的情况下实现自己的路径解析器。 这也意味着我们必须在每次使用路径时分配内存并解析/扩展到完整路径。

  • Exec*CreateProcess / ShellExecute ), CreateShortcutIShellLink )和CopyFilesSHFileOperation )不支持长路径,因此某些指令将支持长路径,而有些则不支持。 这意味着最终用户可以将.exe安装在无法执行的文件夹中!

您可能可以创建一些代码,将文件提取到$ pluginsdir,然后使用系统插件直接使用长目标路径调用kernel32 :: CreateDirectory和kernel32 :: MoveFile ...

您可以在MSDN中获得有关路径的文档:命名文件,路径和命名空间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM