首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测Java应用程序是否以Windows管理员身份运行

检测Java应用程序是否以Windows管理员身份运行
EN

Stack Overflow用户
提问于 2010-12-04 06:19:14
回答 7查看 12.9K关注 0票数 20

我有一个Java应用程序。在Windows7上,有没有我可以分辨的进程是否是以管理员权限运行的。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-04 07:01:07

我在网上找到了这段代码,我想它可以帮你完成这项工作。

代码语言:javascript
复制
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获取有关其工作原理的更多详细信息。

票数 21
EN

Stack Overflow用户

发布于 2014-05-08 18:18:01

我发现了一个不同的解决方案,它似乎是独立于平台的。它尝试编写系统首选项。如果失败,用户可能不是管理员。

正如Tomáš Zato建议的那样,您可能希望抑制由此方法引起的错误消息。可以通过设置System.err来执行此操作

代码语言:javascript
复制
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);
            }
        }
    }
}
票数 36
EN

Stack Overflow用户

发布于 2010-12-04 06:21:24

Java Runtime Environment中没有这样的工具,但它可能位于依赖于平台的本机例程中。请注意,通常确定的最好方法是实际尝试这样做,看看它是否失败。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4350356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档