2011-08-31 17 views
8

Vorrei rilevare se la sessione corrente di Matlab è in esecuzione con privilegi elevati (ad esempio l'utente l'ha avviato con "Esegui come amministratore") in Windows. Idealmente la soluzione funzionerebbe su XP e Windows 7, ma sono felice di avere due soluzioni, se necessario.Posso determinare se Matlab è in esecuzione come con privilegi elevati in Windows?

This risposta suggerisce che potrei essere in grado di ottenere le informazioni necessarie tramite l'interfaccia esterna .Net di Matlab (almeno per Vista e successive), ma mi chiedo se esiste una soluzione Matlab più "nativa" .

+0

Puoi rispondere alla tua domanda con puro codice java? Quindi potrebbe esserci una soluzione più "nativa" (presumo tu intenda, quella che non richiede l'installazione di alcuna libreria esterna ....) – John

risposta

7

Il "Matlab .NET Bridge" è destinato a passare dall'altra parte, chiamando Matlab da .NET. Chiamare le classi .NET da Matlab può essere fatto piuttosto direttamente usando il supporto delle interfacce esterne .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); 

Che dovrebbe funzionare su qualsiasi versione di Windows con .NET installato. Il modo più "nativo" probabilmente richiederebbe di scrivere un MEX per chiamare le funzioni API win32, il che sarebbe più lavoro. Funziona con la mia macchina XP.

+0

Eccellente. Grazie! –

+0

Ho corretto la confusione tra "bridge" e "interfaccia esterna" nella domanda. –

Problemi correlati