如何使用NSIS Unicode \\?\前缀来表示长路径名

时间:2014-09-15 05:29:36

标签: unicode path nsis

我使用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 ..\*

包含我的内容。

2 个答案:

答案 0 :(得分:1)

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

官方NSIS不支持长途径有几个原因:

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

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

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

答案 1 :(得分:0)

您可以在MSDN: Naming Files, Paths, and Namespaces中获取有关路径的文档。