我正在使用Java编写一个安装程序,需要获取提升的权限才能访问“Program Files”目录。基于我在网上找到的信息,我编写了以下实现:
public static void main(String args[]) {
if (!checkPrivileges()) { // spawn a copy w/ elevated privileges
Runtime runtime = Runtime.getRuntime();
try {
Process p = runtime.exec(
"runas /profile /user:Administrator \"java -cp . main.Main\"");
} catch (IOException e) { ... }
} else {
// Run with elevated privileges
}
}
我用来检查权限的测试略有改动,源自这里,代码如下:
private static boolean checkPrivileges() {
File testPriv = new File("C:\\Program Files\\");
if (!testPriv.canWrite()) return false;
File fileTest = null;
try {
fileTest = File.createTempFile("test", ".dll", testPriv);
} catch (IOException e) {
return false;
} finally {
if (fileTest != null)
fileTest.delete();
}
return true;
}
当我运行这个程序时,它未通过权限测试,这是预料中的结果,并且执行了调用。查看
p.isAlive()
的返回值表明该进程确实仍在运行;但是,我没有看到任何新进程的证据,Windows 也没有提示我授予权限。我不熟悉在 Java 中使用
exec()
,所以很可能我对其使用方式有误解。此外,我在尝试做什么方面可能是不可行的?如果不行,是否有一种简单直接的替代方法可以让我获得所需的结果?