我使用NSIS创建安装程序,但是路径名长(> 260个字符)有问题。我听说过一个unicode版本,它可以处理带有特殊前缀\\?\
的长路径名。
我想知道是否有任何文档描述\\?\
前缀的作用以及如何使用它。我在非unicode NSIS版本中使用File /r /x root ..*
。
此处描述了同样的问题Increase Allowable File Path Length,但没有真正的解决方案。
操作系统是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 ..\*
包含我的内容。
答案 0 :(得分:1)
Unicode NSIS fork对长路径有一些支持,但我不确定File
的编译器部分是否是其中之一。
官方NSIS不支持长途径有几个原因:
\\?\
前缀告诉Windows在用户模式下根本不解析路径,因此您将失去对相对路径的支持。然后我们必须使用相对路径支持来实现我们自己的路径解析器。这也意味着我们必须在每次使用路径时分配内存并解析/扩展到完整路径。
Exec*
(CreateProcess
/ ShellExecute
),CreateShortcut
(IShellLink
)和CopyFiles
(SHFileOperation
)不支持长路径,所以一些指令支持长路径,有些则不支持。这意味着最终用户可以在无法执行的文件夹中安装.exe。
您可以创建一些将文件提取到$ pluginsdir的代码,然后使用系统插件直接调用kernel32 :: CreateDirectory和kernel32 :: MoveFile以及长目标路径...
答案 1 :(得分:0)
您可以在MSDN: Naming Files, Paths, and Namespaces中获取有关路径的文档。