2016-08-05 339 views
7

我正在使用.iss脚本在Inno Setup Compiler内部构建exe文件。我需要一些node_modules打包到该应用程序,所以我有[Files]它看起来像这样下一条线:Inno Setup Compiler“找不到指定的路径”长路径错误

Source: "{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs 

当我编译,我收到此错误:

The system cannot find the path specified.

这里编译器输出:

Compiler Output

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

可能导致问题的另一件事是文件路径长度。由于嵌套的依赖性,节点模块通常最终具有荒谬的文件路径长度。在这种情况下,路径长度为。假设这是导致问题的原因,有什么办法可以解决它?

回答

4

这绝对是由于漫长的道路。通常,Windows应用程序无法处理比MAX_PATH(260个字符)长的路径。
请参阅MSDN上的Naming Files, Paths, and Namespaces

常见的解决方法是在路径前加上\\?\(再次参阅上面的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