我有一个Java应用程序。在Windows7上,有没有我可以分辨的进程是否是以管理员权限运行的。
发布于 2010-12-04 07:01:07
我在网上找到了这段代码,我想它可以帮你完成这项工作。
public static boolean isAdmin() {
String groups[] = (new com.sun.security.auth.module.NTSystem()).getGroupIDs();
for (String group : groups) {
if (group.equals("S-1-5-32-544"))
return true;
}
return false;
}
它只能在windows上运行,并内置于核心Java包中。我刚刚测试了这段代码,它确实可以工作。这让我很惊讶,但确实如此。
SID S-1-5-32-544是Windows操作系统中管理员组的id。
Here is the link获取有关其工作原理的更多详细信息。
发布于 2014-05-08 18:18:01
我发现了一个不同的解决方案,它似乎是独立于平台的。它尝试编写系统首选项。如果失败,用户可能不是管理员。
正如Tomáš Zato建议的那样,您可能希望抑制由此方法引起的错误消息。可以通过设置System.err
来执行此操作
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.prefs.Preferences;
import static java.lang.System.setErr;
import static java.util.prefs.Preferences.systemRoot;
public class AdministratorChecker
{
public static final boolean IS_RUNNING_AS_ADMINISTRATOR;
static
{
IS_RUNNING_AS_ADMINISTRATOR = isRunningAsAdministrator();
}
private static boolean isRunningAsAdministrator()
{
Preferences preferences = systemRoot();
synchronized (System.err)
{
setErr(new PrintStream(new OutputStream()
{
@Override
public void write(int b)
{
}
}));
try
{
preferences.put("foo", "bar"); // SecurityException on Windows
preferences.remove("foo");
preferences.flush(); // BackingStoreException on Linux
return true;
} catch (Exception exception)
{
return false;
} finally
{
setErr(System.err);
}
}
}
}
发布于 2010-12-04 06:21:24
Java Runtime Environment中没有这样的工具,但它可能位于依赖于平台的本机例程中。请注意,通常确定的最好方法是实际尝试这样做,看看它是否失败。
https://stackoverflow.com/questions/4350356
复制相似问题