2011-08-31 10 views
8

Me gustaría detectar si la sesión de Matlab actual se está ejecutando con privilegios elevados (es decir, el usuario lo inició con "Ejecutar como administrador") en Windows. Idealmente, la solución funcionaría en XP y Windows 7, pero estoy contento de tener dos soluciones si es necesario.¿Puedo determinar si Matlab se está ejecutando como con privilegios elevados en Windows?

This respuesta sugiere que puedo obtener la información que necesito a través de la interfaz externa .Net de Matlab (al menos para Vista y posterior), pero me pregunto si hay una solución Matlab más "nativa" .

+0

¿Puedes responder a tu pregunta con el código Java puro? Entonces puede haber una solución más "nativa" (supongo que quiere decir, una que no requiere que se instalen bibliotecas externas ...) – John

Respuesta

7

El "Puente de Matlab .NET" es para ir en otra dirección: llamar a Matlab desde .NET. Llamar a las clases de .NET de Matlab se puede hacer bastante directamente usando el soporte de interfaces externas .NET.

function out = isWindowsAdmin() 
%ISWINDOWSADMIN True if this user is in admin role. 
wi = System.Security.Principal.WindowsIdentity.GetCurrent(); 
wp = System.Security.Principal.WindowsPrincipal(wi); 
out = wp.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator); 

Eso debería funcionar en cualquier versión de Windows con .NET instalado. La forma más "nativa" probablemente requeriría escribir un MEX para llamar a las funciones de API de win32, lo que sería más trabajo. Funciona en mi máquina XP.

+0

Excelente. ¡Gracias! –

+0

Corregí la confusión entre "puente" y "interfaz externa" en la pregunta. –

Cuestiones relacionadas