Thirler
Thirler

Reputation: 20760

How can I check if my application can create a symbolic link?

From my Java application I want to create a symbolic link. However my application can run in different circumstances, not all of those permit the creation of symbolic links. I have the following situations:

  1. Linux - can always make a symlink
  2. Windows - can make a symlink if you are running the application as an administrator.

To create the symlink I use Files.createSymbolicLink(). This throws an IOException under Windows when it doesn't have permission. To be precise the exception is:

java.nio.file.FileSystemException: test\link: A required privilege is not held by the client.

I want to be able to tell if I have this permission from the application (Java 7 or newer) before trying to make the symlink. How can I do this?

Upvotes: 4

Views: 428

Answers (1)

crisu
crisu

Reputation: 150

This code bellow will work only for Windows and comes with Java.

public static boolean AdminAuth() {
    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;
}

The SID S-1-5-32-544 is the id of the Administrator group in the Windows operating system.

You can also take a look at this documentation regarding Application Manifest for Windows.

Upvotes: 1

Related Questions