You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在InstallScript中获取自身MSI/EXE安装包的文件名?

InstallScript中获取当前运行安装包自身文件名的实现方案

你可以根据安装包的工程类型,直接调用InstallShield内置的系统变量、原生API实现,不需要引入第三方依赖:

  • Basic MSI工程(纯MSI包/带Setup.exe引导的MSI包)
    如果需要获取内层MSI安装包的文件名,直接读取MSI内置属性OriginalDatabase即可,该属性存储了当前运行MSI的完整磁盘路径,拆分路径即可拿到文件名,参考代码:
    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;
    
    如果你最终交付的是单EXE引导的安装包,需要获取外层EXE文件名(即你实际分发给用户的安装包文件名),直接读取内置系统变量SETUPEXENAME即可,该变量会直接返回当前运行的EXE安装包文件名,不需要额外做路径处理。
  • 纯InstallScript/InstallScript MSI工程
    这类工程最终编译生成原生EXE安装包,在主安装流程脚本中直接读取内置系统变量SETUPEXENAME,就能拿到当前运行的安装包自身文件名;如果需要提取内嵌的MSI文件名,再使用上面OriginalDatabase属性的方案即可。

避坑提示:如果安装包做了单EXE自解压封装,OriginalDatabase拿到的是临时目录下释放的MSI文件名,和你对外分发的EXE文件名不一致,要获取分发的安装包文件名时必须用SETUPEXENAME变量。

内容的提问来源于stack exchange,提问作者ababo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:39:24