install4j v9.0版本后如何检测Windows代理设置并恢复代理转发功能
解决方案
方案1:修改install4j启动器配置(推荐,无代码侵入)
这是最简便的修复方式,不需要修改业务代码,仅调整install4j打包配置即可:
- 打开你的install4j项目,进入需要配置的启动器编辑页
- 切换到 Java invocation 标签页
- 找到 Pass system proxy parameters to VM 复选框,勾选该选项
- 重新打包应用即可生效
该选项在install4j 9.0.1代理逻辑重构后默认改为未勾选状态,老版本默认开启。勾选后install4j会自动将安装/运行时检测到的系统代理写入Java标准代理系统属性,Apache HttpClient开启useSystemProperties参数后可以直接读取到对应配置。
方案2:主动调用install4j API获取代理配置(适合需要自定义代理逻辑的场景)
如果需要灵活控制代理配置的加载优先级,可在应用初始化阶段主动读取install4j存储的代理参数,手动写入系统属性:
import com.install4j.api.launcher.Variables; public class ProxyInit { public static void initProxyFromInstall4j() { try { String proxyHost = (String) Variables.getInstallerVariable("sys.proxyHost"); Integer proxyPort = (Integer) Variables.getInstallerVariable("sys.proxyPort"); if (proxyHost != null && proxyPort != null) { System.setProperty("http.proxyHost", proxyHost); System.setProperty("http.proxyPort", String.valueOf(proxyPort)); System.setProperty("https.proxyHost", proxyHost); System.setProperty("https.proxyPort", String.valueOf(proxyPort)); // 处理代理认证配置 String proxyUser = (String) Variables.getInstallerVariable("sys.proxyUsername"); String proxyPwd = (String) Variables.getInstallerVariable("sys.proxyPassword"); if (proxyUser != null) { System.setProperty("http.proxyUser", proxyUser); System.setProperty("http.proxyPassword", proxyPwd); System.setProperty("https.proxyUser", proxyUser); System.setProperty("https.proxyPassword", proxyPwd); } } } catch (Exception e) { // 非install4j启动场景可直接忽略该异常 } } }
注意事项
- 若应用需要支持用户在运行期自行修改代理配置,优先选择方案2,可自行控制系统代理、用户自定义代理的加载优先级
- 若仅在安装流程中的自定义动作需要使用代理,无需修改启动器配置,只需在对应动作的配置页勾选 Use system proxy 选项即可
内容的提问来源于stack exchange,提问作者fassen
相关产品推荐
相关产品推荐

