簡體   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