如何在InstallScript中获取自身MSI/EXE安装包的文件名?
InstallScript中获取当前运行安装包自身文件名的实现方案
你可以根据安装包的工程类型,直接调用InstallShield内置的系统变量、原生API实现,不需要引入第三方依赖:
- Basic MSI工程(纯MSI包/带Setup.exe引导的MSI包)
如果需要获取内层MSI安装包的文件名,直接读取MSI内置属性OriginalDatabase即可,该属性存储了当前运行MSI的完整磁盘路径,拆分路径即可拿到文件名,参考代码:
如果你最终交付的是单EXE引导的安装包,需要获取外层EXE文件名(即你实际分发给用户的安装包文件名),直接读取内置系统变量function STRING GetCurrentPackageName(hMSI) STRING sPackageFullPath, sPackageName; NUMBER nPathLen; begin nPathLen = MAX_PATH; // 读取MSI内置属性获取安装包全路径 MsiGetProperty(hMSI, "OriginalDatabase", sPackageFullPath, nPathLen); // 从全路径中拆分出带后缀的文件名 PathGetPart(sPackageFullPath, sPackageName, FILENAME + EXTENSION, NULL, FULLPATH); return sPackageName; end;SETUPEXENAME即可,该变量会直接返回当前运行的EXE安装包文件名,不需要额外做路径处理。 - 纯InstallScript/InstallScript MSI工程
这类工程最终编译生成原生EXE安装包,在主安装流程脚本中直接读取内置系统变量SETUPEXENAME,就能拿到当前运行的安装包自身文件名;如果需要提取内嵌的MSI文件名,再使用上面OriginalDatabase属性的方案即可。
避坑提示:如果安装包做了单EXE自解压封装,
OriginalDatabase拿到的是临时目录下释放的MSI文件名,和你对外分发的EXE文件名不一致,要获取分发的安装包文件名时必须用SETUPEXENAME变量。
内容的提问来源于stack exchange,提问作者ababo
相关产品推荐
相关产品推荐

