Inno setup 如何获取当前Inno安装脚本文件的文件名?
我想获取当前Inno安装脚本文件的名称,以便在它之后命名生成的安装程序包。例如,如果当前的Inno安装脚本文件是“MyAppSetup.iss”,我希望生成的安装文件是“MyAppSetup.exe” 生成的安装文件的名称由Inno setup的Inno setup 如何获取当前Inno安装脚本文件的文件名?,inno-setup,Inno Setup,我想获取当前Inno安装脚本文件的名称,以便在它之后命名生成的安装程序包。例如,如果当前的Inno安装脚本文件是“MyAppSetup.iss”,我希望生成的安装文件是“MyAppSetup.exe” 生成的安装文件的名称由Inno setup的[setup]部分中的OutputBaseFilename声明控制,因此如果有Inno setup预处理器变量返回当前脚本文件的名称,那就太好了。比如: OutputBaseFilename={#SourceFileName}.exe 不幸的是,没有I
[setup]
部分中的OutputBaseFilename
声明控制,因此如果有Inno setup预处理器变量返回当前脚本文件的名称,那就太好了。比如:
OutputBaseFilename={#SourceFileName}.exe
不幸的是,没有Inno设置预处理器变量
{SourceFileName}
。我知道{#SourcePath}
变量,但它返回脚本文件的目录路径,而不返回文件名。使用一些预定义的Inno Setup预处理器变量,但似乎没有一个返回当前脚本文件的名称。我希望\uuuu文件\uuuuu
变量在读取列表中变量的描述后可以工作,但它返回一个空字符串。我知道这不是您想要的,但为什么您不能这样做:
[ISPP]
#define ScriptFileName "MyAppSetup"
[Setup]
AppPublisher={#AppPublisher}
OutputBaseFilename={#ScriptFileName}Setup
然后,您需要做的就是编辑文件顶部的一个引用
更新
我遇到过这样的情况,它说:
您可以使用:
#expr SetSetupSetting("OutputBaseFilename", sFileName)
然而,困难的部分是自动查找文件名。
您可以使用以下ISPP函数执行其他操作
ISPP内置函数无法完成的编译时任务:
Exec
函数:执行一个外部程序来执行附加操作
功能,并将结果写入INI文件。默认执行
等待进程完成
ReadIni
函数:读取结果
并将其合并到脚本中
如何确定文件名取决于您。也许你可以
枚举窗口并从Inno安装程序中提取文件名
窗口标题,但因为您可能有多个Inno设置
拷贝打开后,你必须找到一个可靠的方法。Inno补充道
[Compiling]
在编译过程中添加到标题,这样更容易
查找正在使用的副本,但中可能有多个副本
编译状态。你完全可以确定哪一份是真的
通过检查父进程的进程ID来运行程序
进程,您可以使用Process32First
/Process32Next
和
检查进程的32ParentProcessID
。我工作太多了
知道
但还有另一种说法:
(但是,如果您正在进行自动构建,则可以设置输出
命令行中的文件名--这可能足以
你真的想要
那么您考虑过使用批处理文件和命令行吗?然后,您可以在编译时使用批处理行的优点。提供了有关在批处理文件中使用当前文件名的信息
我个人认为批量文件编译是一种可行的方法。这是不可能的。有,但它有一个值,仅用于
#include
d文件
如果一个目录中从未有多个
.iss
文件,则可以使用查找其名称
#define ScriptFindHandle = FindFirst(SourcePath + "\*.iss", 0)
#if !ScriptFindHandle
#error "No script found"
#endif
#define SourceFileName = FindGetFileName(ScriptFindHandle)
#if FindNext(ScriptFindHandle)
#error "More than one script found"
#endif
#expr FindClose(ScriptFindHandle)
#define SourceBaseName = RemoveFileExt(SourceFileName)
然后,要在[setup]
部分的当前脚本文件之后命名安装文件,您应该使用:
[Setup]
OutputBaseFilename={#SourceBaseName}
但是,如果要自动编译大量安装程序,我假设您使用命令行编译。因此,您只需在父批处理文件(或类似脚本)中传递脚本名称即可: 使用
BaseName
如下:
[Setup]
OutputBaseFilename={#BaseName}
[Setup]
OutputBaseFilename={#BaseName}