Inno Setup编译器"无法找到指定的路径"错误与长路径

Mik*_*son 10 inno-setup max-path filepath node-modules

我正在使用.iss脚本在Inno Setup Compiler中构建一个exe文件.我需要将一些node_modules打包到这个应用程序中,所以我有一行看起来像这样:[Files]

Source: "{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \
    DestDir: "{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs
Run Code Online (Sandbox Code Playgroud)

编译时,我收到此错误:

该系统找不到指定的路径.

这是编译器输出:

编译器输出

所以,它似乎运行正常,直到它中止.我最初的想法是,browser.js它不存在,但经过双重检查,情况并非如此.此外,我在源路径中使用通配符,因此编译器知道该文件存在,但似乎在压缩它时遇到问题.

另一个可能导致问题的是文件路径长度.由于嵌套依赖性,节点模块通常最终会出现荒谬的文件路径长度.在这种情况下,路径长度为260.假设这是造成问题的原因,有什么方法可以绕过它吗?

Mar*_*ryl 7

这绝对是由于漫长的道路.通常,Windows应用程序无法处理超过MAX_PATH(260个字符)的路径.
请参阅MSDN上的命名文件,路径和命名空间.

常见的解决方法是在路径前添加前缀\\?\(再次参见上面的MSDN文章).前缀只能用于绝对路径.但Inno Setup编译器对该Source属性进行了扼流.它查找:并且它只接受在:使用compiler:userdocs:前缀之前只有驱动器号的路径.

您可以通过使用具有卷ID的UNC路径(因此没有冒号)来破解它.

使用此mountvol命令查找源驱动器的UNC路径.

然后DestDir,在安装时(不是在编译时),您将遇到与属性的长路径相同的问题.在那里,冒号没有问题,所以你可以简单地使用\\?\前缀.

Source: "\\?\Volume{bb919c3e-bdb1-42b8-9601-6715becd8683}\{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \
    DestDir: "\\?\{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs
Run Code Online (Sandbox Code Playgroud)

当然,如果问题是由根路径已经太长引起的,您只需将源文件移动到路径较短的文件夹即可解决问题.或者您可以使用subst创建虚拟驱动器,也可以创建符号链接/目录连接.