如何检查我的 Java 应用程序是否作为“系统”/“本地系统”运行(如 Windows 服务列表中所示)?
我尝试使用这个:
System.out.println("Running with user: " + System.getenv().get("USERDOMAIN") + "\\" + System.getenv().get("USERNAME"));
...但它似乎DOMAIN\COMPUTERNAME
根据程序运行的位置返回。所以它可以像DOMAIN1\COMPUTER1
其他地方一样,FOO\SERVER451
并且都仍然意味着“系统”帐户。
对于背景信息,我的 Java 应用程序使用“Apache Commons Daemon Service Runner”包装到 Windows 服务中,默认情况下它将作为“本地系统”运行(与示例图像中的方式相同)。
我真的很想简化我的代码以打印SYSTEM
或MYDOMAIN\JackTheUser
根据用户类型...有没有办法用Java来做?
编辑 20/12/02:这就是我在 SO 军队努力寻找正确答案的同时所做的事情:
Main:
String username = System.getenv().get("USERNAME");
String userdomain = System.getenv().get("USERDOMAIN");
String servername = getComputerName();
if (username.equalsIgnoreCase((servername + "$"))) {
System.out.println("Running with user: 'Local System'("
+ userdomain + "\\" + username + ")");
} else {
System.out.println("Running with user: '" + userdomain + "\\"
+ username + "'");
}
Methods:
private static String getComputerName() {
Map<String, String> env = System.getenv();
if (env.containsKey("COMPUTERNAME"))
return env.get("COMPUTERNAME");
else if (env.containsKey("HOSTNAME"))
return env.get("HOSTNAME");
else
return "Unknown Host name";
}
印刷:
Running with user: 'MYDOMAIN\jokkeri'
或者Running with user: 'Local System'(MYSERVER\SERVER_1$)
(不是一个完美的解决方案,我敢肯定在很多情况下它不起作用,但这是一个起点)
EDIT2 20/12/02:从超级用户的这个线程中找到了一些关于 SYSTEM 帐户的好信息:https ://superuser.com/questions/265216/windows-account-ending-with