permisos para esta entro ejecutar desfasada desactivar darle control como administrador actualizar actualizaciones java windows admin privileges

esta - permisos para ejecutar java



Detectar si la aplicación Java se ejecutó como un administrador de Windows (6)

Encontré este fragmento de código en línea, creo que hará el trabajo por ti.

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; }

SÓLO funciona en Windows y viene integrado en el paquete principal de Java. Acabo de probar este código y funciona. Me sorprendió, pero lo hace.

El SID S-1-5-32-544 es la identificación del grupo Administrador en el sistema operativo Windows.

Aquí está el enlace para más detalles sobre cómo funciona.

Tengo una aplicación Java. ¿De todos modos puedo decir si el proceso se ejecutó con privilegios de administrador en Windows 7?


No existe tal recurso disponible en Java Runtime Environment, pero podría estar en una rutina nativa dependiente de la plataforma. Tenga en cuenta que, por lo general, la mejor manera de estar seguro es tratar de hacerlo, y ver si falla.


O podrías hacer esto:

System.getenv().get("USER")

Y vea qué usuario comenzó el proceso.

Cuando lo ejecuto como yo obtengo "goran", cuando lo ejecuto con sudo obtengo "root". Funciona en Linux. Probablemente lo que se necesitaba.


Solo al intentar una operación que requiera tal acceso (como vincular un puerto de bajo número o abrir un archivo conocido para proteger).


El método de la respuesta marcada mejor funcionó muy bien para mí hasta el momento en que tuve que construir el código en Jenkins en una máquina Linux. com.sun.security.auth.module.NTSystem () no está disponible allí y el uso de paquetes Sun generalmente se considera una mala práctica: enlace


He encontrado una solución diferente que parece ser independiente de la plataforma. Intenta escribir preferencias del sistema. Si eso falla, el usuario podría no ser un administrador.

public static boolean isAdmin(){ Preferences prefs = Preferences.systemRoot(); try{ prefs.put("foo", "bar"); // SecurityException on Windows prefs.remove("foo"); prefs.flush(); // BackingStoreException on Linux return true; }catch(Exception e){ return false; } }

Como Tomáš Zato sugirió, es posible que desee suprimir los mensajes de error causados ​​por este método. Puede hacer esto configurando System.err:

public static boolean isAdmin(){ Preferences prefs = Preferences.systemRoot(); PrintStream systemErr = System.err; synchronized(systemErr){ // better synchroize to avoid problems with other threads that access System.err System.setErr(null); try{ prefs.put("foo", "bar"); // SecurityException on Windows prefs.remove("foo"); prefs.flush(); // BackingStoreException on Linux return true; }catch(Exception e){ return false; }finally{ System.setErr(systemErr); } } }