安装程序运行时如何计算并设置建议的安装目录?
多版本安装包默认安装目录差异化配置方案
核心绕过逻辑
media wizard的静态配置字段不支持传入动态installer变量是预期行为,直接通过Installation location页面的前置激活脚本覆盖默认目录计算逻辑即可实现需求,操作步骤如下:
操作步骤
1. 确认编译器变量配置
你已有的生产/测试版区分编译器变量可直接复用,本文以IS_PROD_BUILD为例:生产版赋值为true,测试版赋值为false。
2. 覆盖默认安装目录逻辑
- 打开Installer模块下的
Screens & Actions界面,找到Installation location页面 - 进入该页面的属性面板,找到Pre-activation script输入框,填入以下Groovy脚本:
if (compilerVariable.getBoolean("IS_PROD_BUILD")) { // 生产版默认路径为Program Files,需管理员权限 context.setInstallationDir(new File(context.getVariable("sys.programFilesDir"), "你的应用名称")); } else { // 测试版默认路径为用户主目录,无需管理员权限 context.setInstallationDir(new File(context.getVariable("sys.userHome"), "你的应用名称")); }
- 回到media wizard配置页:取消勾选
Custom base directory选项,Directory name字段可填任意占位值,脚本配置优先级高于media wizard的静态配置,不会被覆盖。
3. 配套权限配置
为匹配两类安装包的权限要求,可直接通过编译器变量控制权限申请逻辑:
- 进入
General Settings > Media Options,找到Request privileges下拉选项 - 填入表达式:
${IS_PROD_BUILD ? "admin" : "none"},即可实现生产版自动申请管理员权限、测试版不申请权限的效果。
注意事项
之前你在其他位置设置sys.installationDir不生效,是因为执行时机早于media wizard的默认目录计算逻辑,写在Installation location页面的Pre-activation script中会在页面加载前最后执行,完全覆盖默认计算结果。
内容的提问来源于stack exchange,提问作者Reto Höhener
相关产品推荐
相关产品推荐

