怎么把已做好的ISS用Inno Setup做成EXE输出目录在哪
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么把已做好的ISS用Inno Setup做成EXE输出目录在哪相关的知识,希望对你有一定的参考价值。
我用Inno Setup 完成一个ISS的文件也测试了一次,但是不知道怎么把它做成独立的EXE文件,也就是说怎么把ISS文件做成EXE后,读取出去,文件夹的位置在哪?
在[setup]段新增一句话:OutPutdir = "你自己设置的目录",然后他会把生成的exe文件放在你设置的目录下。或者直接将OutPutDir=. 这样就会将生成的文件放在与iss脚本相同的目录下。默认的在iss脚本所在目录下的Output目录下。 参考技术A 我来告诉你吧 你等等~~Inno Setup Compiler“找不到指定的路径”错误,路径长
【中文标题】Inno Setup Compiler“找不到指定的路径”错误,路径长【英文标题】:Inno Setup Compiler "Cannot find the path specified" error with long paths 【发布时间】:2016-12-11 21:24:09 【问题描述】:我正在使用.iss
脚本在Inno Setup Compiler 中构建一个exe 文件。我需要将一些 node_modules 打包到这个应用程序中,所以我在 [Files]
下有一行如下所示:
Source: "#SourcePathEncore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \
DestDir: "app\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs
当我编译时,我收到这个错误:
这是编译器的输出:
所以,它似乎运行良好,直到它中止。我最初的想法是 browser.js
不存在,但经过仔细检查,情况并非如此。另外,我在源路径中使用了通配符,因此编译器知道文件存在,但压缩它似乎有问题。
可能导致问题的另一件事是文件路径长度。由于嵌套的依赖关系,节点模块通常最终具有可笑的文件路径长度。在这种情况下,路径长度为 260。假设这是导致问题的原因,有没有办法解决它?
【问题讨论】:
subst
(ss64.com/nt/subst.html)(“替换驱动器号本地路径。”)当工作文件夹的路径足够长且与源路径融为一体时有效。
【参考方案1】:
这绝对是因为路途遥远。通常,Windows 应用程序无法处理超过 MAX_PATH
(260 个字符)的路径。
请参阅 MSDN 上的 Naming Files, Paths, and Namespaces。
一种常见的解决方法是在路径前加上 \\?\
前缀(再次参见上面的 MSDN 文章)。前缀只能用于绝对路径。但是 Inno Setup 编译器使用 Source
属性对此感到窒息。它会查找:
,并且只接受在:
之前只有驱动器号或使用compiler:
或userdocs:
前缀的路径。
您可以通过使用带有卷 ID(因此没有冒号)的 UNC 路径来破解它。
使用 mountvol
命令查找源驱动器的 UNC 路径。
然后在安装时(而不是在编译时),DestDir
属性的长路径也会遇到同样的问题。在那里,冒号没有问题,因此您可以简单地使用\\?\
前缀。
Source: "\\?\Volumebb919c3e-bdb1-42b8-9601-6715becd8683\#SourcePathEncore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \
DestDir: "\\?\app\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs
当然,如果问题是由根路径太长引起的,您只需将源文件移动到路径较短的文件夹即可解决问题。或者您可以使用subst
创建虚拟驱动器,也可以创建符号链接/目录连接。
【讨论】:
【参考方案2】:遇到同样的问题,下面是有关subst 解决方法的更多详细信息,如 cmets 和接受的答案中所述。
下面是一些precompile.bat
文件的内容,用于将一些本地路径与A:
驱动器号相关联
@echo off
REM NB: Removing any previous association to be sure new one will work
subst A: /D 1> NUL 2>&1
subst A: "%~dp0.."
还有一些postcompile.bat
的内容最后去掉关联
@echo off
subst A: /D 1> NUL 2>&1
NB1:小心,一旦关联,很难直接在 .iss
脚本中导航上面的路径,因为 A:\..
仍然是 A:\
!(我陷入了这个问题,所以值得知道)。然后应直接在precompile.bat
中与所有必需文件的最顶层文件夹建立关联。
NB2:我不知道是否可行提醒之前的任何关联并最终恢复它
这些步骤可以添加到.iss
脚本中,如下所示:
[PreCompile]
Name: "precompile.bat"; Flags: cmdprompt redirectoutput
[PostCompile]
Name: "postcompile.bat"; Flags: cmdprompt redirectoutput
最后请注意,[PreCompile]
和 [PostCompile]
部分将仅从 IDE 执行。它们不会从命令行执行(至少在 inno 5.5.9 中),我也属于这种情况......所以从命令行完整编译应该如下所示:
call "precompile.bat"
call "%ProgramFiles(x86)%\Inno Setup 5\ISCC.exe" "myscript.iss"
call "postcompile.bat"
注意:我认为调用 Compil32.exe /cc "myscript.iss"
(IDE 编译器)而不是 ISCC.exe
(命令行编译器)应该运行 [PreCompile]
和 [PostCompile]
部分,但在我的情况下,我必须将额外的 /D
选项传递给编译器因此无法直接调用Compil32.exe
。
【讨论】:
请注意,[PreCompile]
/[PostCompile]
是一些 Inno Setup 扩展的功能。它不适用于 Inno Setup 本身(无论是 GUI 还是命令行)。以上是关于怎么把已做好的ISS用Inno Setup做成EXE输出目录在哪的主要内容,如果未能解决你的问题,请参考以下文章
直接用bat命令对Inno Setup的脚本文件.iss进行编译
用inno setup或者其他软件打包exe程序 怎么防止重复安装的问题