51 messaggi dal 08 febbraio 2002
Buongiorno,
sto facendo il porting di un'applicazione ASP.NET dalla versione 1.1 alla 2.0
La pagina di login dell'applicazione scrive automaticamente nel campo user l'utente di dominio loggato correntemente con questa istruzione :

string username = System.Windows.Forms.SystemInformation.UserName;

ma con il framework 2.0 l'istruzione mi restituisce il nome computer;
Come posso recuperare di nuovo l'informazione ?

Grazie
47 messaggi dal 18 settembre 2006
Contributi
Il metodo corretto per risalire al principal correntemente loggato è utilizzare il metodo GetCurrent() della classe WindowsIdentity, nel namespace System.Security.Principal. La proprietà Name dell'oggetto ritornato (di tipo WindowsIdentity) fornisce proprio ciò che stai cercando.

HTH

Efran Cobisi
Solution developer, consultant and trainer
MCAD, MCT, MCTS: SQL Server 2005
51 messaggi dal 08 febbraio 2002
Mmm...

string username = WindowsIdentity.GetCurrent().Name;

mi restituisce "FSITMIC00130\\IUSR_FSITMIC00130"

FSITMIC00130 è il nome macchina del mio pc ... quello che volevo io è il nome dell' utente di dominio (quello che inserisco quando mi loggo alla rete aziendale).
47 messaggi dal 18 settembre 2006
Contributi
Ok, credo che tu abbia un po' di confusione sulla gestione degli utenti in Windows. L'utente "FSITMIC00130\IUSR_FSITMIC00130" che ti viene ritornato è effettivamente l'utente che esegue il processo dove gira la tua applicazione; se FSITMIC00130 è il nome della tua macchina, significa che l'utente è locale. Non per questo sei limitato ad eseguire processi con utenti locali, anzi.

Mi pare di comunque di capire che desideri sapere il nome dell'utente che eventualmente ha effettuato interattivamente il logon sulla macchina ospitante, aprendo così una sessione interattiva... Il codice è un po' più complesso ma digeribile. :)

Prima di tutto devi aggiungere il riferimento a System.Management.dll nel tuo progetto. Poi puoi utilizzare una funzione tipo questa:

        string GetLoggedOnUserName()
        {
            ManagementScope scope = new ManagementScope(@"\\.\Root\Cimv2");
            scope.Connect();

            // Accede alla classe WMI del computer locale

            ManagementClass computerSystem =
                new ManagementClass("Win32_ComputerSystem");

            foreach (ManagementObject mgmtObject in computerSystem.GetInstances())
          {
                // La proprietà Username contiene il nome dell'utente che ha fatto
                // log on interattivo nel sistema.

                PropertyData propCurrent = mgmtObject.Properties["Username"];

                if (propCurrent.Value != null)
                {
                    return (string)propCurrent.Value;
                }
          }

            return null;
        }



Ciao, HTH

Efran Cobisi
Solution developer, consultant and trainer
MCAD, MCT, MCTS: SQL Server 2005
51 messaggi dal 08 febbraio 2002
ok tutto a posto ... mi ero solo dimenticato di impedire l'accesso anonimo su IIS

Grazie !!
47 messaggi dal 18 settembre 2006
Contributi

Efran Cobisi
Solution developer, consultant and trainer
MCAD, MCT, MCTS: SQL Server 2005

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.