java user.home_Java读取user.home环境变量

问题

将Java写的一个后台程序安装为Windows服务,程序会用到user.home这个变量,安装为服务后就读取不到这个变量了System.getProperty("user.home")

解决

将Java程序安装为Windows服务的是DOS批处理,在批处理中追加将当前用户主目录写到一个文件中,Java程序读取这个文件内容就可以了

@echo off

echouserhome=%USERPROFILE% > vcp.config

......略

pause

读取userhome变量,FileUtil用的hutool中的工具类

public static String getUserHome() throws Exception {

String userhome = null;

File configFile = new File("vcp.config");

if (!configFile.exists()) {

throw new Exception("配置文件vcp.config不存在");

}

List lines = FileUtil.readLines(configFile, "UTF-8");

for (String tmp : lines) {

System.out.println(tmp);

String[] tmpArr = tmp.split("=");

if (tmpArr.length == 2 && "userhome" .equals(tmpArr[0])) {

userhome = tmpArr[1].trim();

}

}

if (userhome == null) {

throw new Exception("配置文件vcp.config未找到userhome配置项");

}

return userhome;

}

过程

一开始用的jdk7,其实在本地测试是没有问题的,安装为Window服务后读取变量就不一样了

System.getenv("USERPROFILE")得到的是这么一个值:

C:windowssystem32configsystemprofile

因为用的JDK7,搜到了这个以为是JDK7的user.home的BUG,换成JDK8问题依然没有解决

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4787931

https://bugs.openjdk.java.net/browse/JDK-8137163

https://stackoverflow.com/questions/585534/what-is-the-best-way-to-find-the-users-home-directory-in-java/586345

https://stackoverflow.com/questions/2134338/java-user-home-is-being-set-to-userprofile-and-not-being-resolved/2134775#2134775

https://stackoverflow.com/questions/16889940/on-windows-7-how-does-java-jvm-set-user-home-system-property

最后发现是Windows服务的隔离机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值