相关疑难解决方法(0)

检测Java应用程序是否作为Windows管理员运行

我有一个Java应用程序.无论如何,我可以判断该进程是否在Windows 7上以管理员权限运行.

java windows privileges admin

19
推荐指数
3
解决办法
1万
查看次数

Files.exists(path)和path.toFile().exists()为同一文件提供不同的结果

我得到不同的结果为Files.exists(path),以path.toFile().exists()在Windows本地文件.我可以在Windows资源管理器中看到这个文件,虽然我有(随机)修改过的权限,也许权限没有意义.

但是,这并不能解释为什么旧方法返回true并且新方法返回false.该文件确定存在但可能对运行Java代码的用户不可见,因此我不确定应该是什么样的正确答案.我也无法看到如何查看哪个用户正在运行代码,计算机上只有一个真正的用户Paul,但我想知道是否以管理员身份运行或不影响事情.

System.out.println("Path Exists(1):"+Files.exists(path));
System.out.println("Path Exist(2) :"+path.toFile().exists());
Run Code Online (Sandbox Code Playgroud)

Path Exists(1):false
Path Exist(2) :true
Run Code Online (Sandbox Code Playgroud)

System.out.println("Path readable(3) :"+Files.isReadable(path));
System.out.println("Path readable(4):"+path.toFile().canRead());
Run Code Online (Sandbox Code Playgroud)

以同样的方式给予

Path readable(3) :false
Path readable(4):true
Run Code Online (Sandbox Code Playgroud)

权限输出

File C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf permissions
owner:PCLAPTOP\Paul
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
BUILTIN\Users:READ_DATA/READ_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/READ_ACL/SYNCHRONIZE:ALLOW
NT AUTHORITY\Authenticated Users:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/SYNCHRONIZE:ALLOW


c:\Code\jthink\opensrc\jaudiotagger>attrib C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
A    R       C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
Run Code Online (Sandbox Code Playgroud)

更新 我没有得出结论,但认为这些信息可能有用.

我在IntelliJ IDE中运行代码而没有启用IDE Run选项的IDE Run程序,启用此功能后,Java应用程序也获得了管理员权限.

感兴趣的是另一个文件我没有添加任何DENY权限,我只是禁用了继承权限并从所有组中删除了READ权限.然后,当我作为用户运行而没有运行管理员启用它无法读取文件,此代码也无法输出任何信息

AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
if (view != null)
{
    sb.append("Owner:"+view.getOwner().getName()+"**");
    for (AclEntry acl : view.getAcl())
    {
        sb.append(acl.principal()+"**");
        for(AclEntryPermission aep:acl.permissions()) …
Run Code Online (Sandbox Code Playgroud)

java security nio

13
推荐指数
1
解决办法
4829
查看次数

在Windows上以管理员身份运行Java应用程序

我正在用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
    }
}
Run Code Online (Sandbox Code Playgroud)

我用于检查权限的测试稍微修改一下,在这里找到的答案如下所示:

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", …
Run Code Online (Sandbox Code Playgroud)

java windows uac elevated-privileges

5
推荐指数
1
解决办法
6478
查看次数

标签 统计

java ×3

windows ×2

admin ×1

elevated-privileges ×1

nio ×1

privileges ×1

security ×1

uac ×1