मैं C # का उपयोग करके .NET में वर्तमान उपयोगकर्ता नाम कैसे प्राप्त करूं?


606

मैं C # का उपयोग करके .NET में वर्तमान उपयोगकर्ता नाम कैसे प्राप्त करूं?

जवाबों:


897
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

96
यह किस तरह से अलग है Environment.UserName?
सैम हैरवेल

59
@SimonGillbee, यह गलत है, Environment.UserName"RunAs" उपयोगकर्ता को लौटाएगा।
बोलू

5
सत्यापित करने के लिए .... MessageBox.Show(Environment.UserName);इसे अपने window_loadedईवेंट में डालें , और इसे रनर्स का उपयोग करके चलाएं ....
बोलू


4
यह लौटाता है Domain\Username। मैं उपयोगकर्ता नाम से जुड़ा नाम कैसे प्राप्त कर सकता हूं?
SearchForKnowledge

325

यदि आप उपयोगकर्ताओं के नेटवर्क में हैं, तो उपयोगकर्ता नाम अलग होगा:

Environment.UserName
- Will Display format : 'Username'

बजाय

System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'

इच्छित प्रारूप चुनें।


7
आप के Environment.UserDomainName + "\\" + Environment.UserNameरूप में समान रूप से परिणाम प्राप्त करने के लिए उपयोग कर सकते हैं System.Security.Principal.WindowsIdentity.GetCurrent().Name। अब, क्या अंतर है, आप पूछते हैं ... मुझे यकीन नहीं है।
गुत्बलेंडर

9
मुझे उपयोगकर्ता को ऐप चलाने की आवश्यकता है जो लॉग इन करने के बजाय (पर्यावरण.उपयोगकर्ता वह नहीं है जो मैं चाहता हूं), इसलिए मैंने डोमेन को बंद करने के लिए निम्न कार्य किया: System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
thehelix

आप जोड़ने की जरूरत है ToArray()के बाद Splitकॉल करने से पहलेLast()
codenamezero

1
@codenamezero नहीं ToArray()की जरूरत है। आप using System.Linq;हालांकि की आवश्यकता होगी ।
theSoftwareJedi

112

संपत्ति का प्रयास करें Environment.UserName:।


5
या,string userName = Environment.UserName;
डोनट

10
सावधानी: साइमन गिल्बी की तरह, जो स्वीकृत उत्तर की टिप्पणियों में उल्लेखित Environment.UsernNameहै, लॉग-इन खाता-नाम देता है, लेकिन WindowsIdentity.GetCurrent().Nameखाता-नाम लौटा रहा है जो अनुप्रयोग के रूप में चल रहा है।
गेरवल्ड

5
@ एलो: सावधानी: यह जानकारी भी स्पष्ट रूप से गलत है, बोलू का जवाब देखें । :-)
टीजे क्राउडर

ASP.NET के साथ इसका उपयोग न करें। docs.microsoft.com कहता है: "यदि कोई ASP.NET अनुप्रयोग विकास के वातावरण में चलता है, तो UserName गुण वर्तमान उपयोगकर्ता का नाम वापस करता है। एक प्रकाशित ASP.NET अनुप्रयोग में, यह गुण अनुप्रयोग पूल खाते का नाम लौटाता है ( जैसे कि डिफॉल्ट एपपूल)। "
फीहोजा

28

पर्यावरण के लिए प्रलेखन। उपयोगकर्ता नाम थोड़ा परस्पर विरोधी प्रतीत होता है:

पर्यावरण। उपयोगकर्ता नाम संपत्ति

उसी पृष्ठ पर यह कहता है:

उस व्यक्ति का उपयोगकर्ता नाम प्राप्त करता है जो वर्तमान में विंडोज ऑपरेटिंग सिस्टम पर लॉग ऑन है।

तथा

उस व्यक्ति का उपयोगकर्ता नाम प्रदर्शित करता है जिसने वर्तमान धागा शुरू किया था

यदि आप RunAs का उपयोग करके Environment.UserName का परीक्षण करते हैं, तो यह आपको RunAs उपयोगकर्ता खाते का नाम देगा, न कि उपयोगकर्ता जो मूल रूप से Windows पर लॉग ऑन है।


24

मैं अन्य उत्तरों से पूरी तरह से अलग हूं, लेकिन मैं एक और विधि पर प्रकाश डालना चाहूंगा जो कहती है

String UserName = Request.LogonUserIdentity.Name;

उपरोक्त विधि ने मुझे प्रारूप में उपयोगकर्ता नाम लौटाया: DomainName \ UserName । उदाहरण के लिए, यूरोप \ उपयोगकर्ता नाम

जो इससे अलग है:

String UserName = Environment.UserName;

जो प्रारूप में प्रदर्शित होता है: उपयोगकर्ता नाम

और अंत में:

String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

जो दिया गया: NT AUTHORITY\IUSR(IIS सर्वर पर एप्लिकेशन चलाते समय) और DomainName\UserName(स्थानीय सर्वर पर एप्लिकेशन चलाते समय)।


"अनुरोध" का उपयोग करने के लिए क्या नामस्थान आवश्यक है?
TK-421

1
@ TK-421 Requestकेवल तभी काम करता है जब आप एक वेब एप्लिकेशन हो। इसका उदाहरण हैSystem.Web.HttpRequest
गेरार्डो ग्रिग्नोली


11

तुम भी उपयोग करने की कोशिश कर सकते हैं:

Environment.UserName;

ऐशे ही...:

string j = "Your WindowsXP Account Name is: " + Environment.UserName;

आशा है कि यह सहायक रहा होगा।


11

मैंने मौजूदा उत्तरों से कई संयोजनों की कोशिश की, लेकिन वे मुझे दे रहे थे

DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool

मैंने उपयोग करना समाप्त कर दिया

string vUserName = User.Identity.Name;

जिसने मुझे केवल वास्तविक उपयोगकर्ता डोमेन उपयोगकर्ता नाम दिया।


अति उत्कृष्ट। मुझे केवल ऐप पूल पहचान भी मिली। लेकिन आपके कोड ने मेरी समस्या हल कर दी। बहुत बहुत धन्यवाद।
सूर्यकविता

ऐसा लगता है कि आप उपयोगकर्ता से अनुरोध करने के लिए उपयोगकर्ता नाम चाहते थे, मुझे लगता है कि एक एमवीसी या वेब एपीआई नियंत्रक है। प्रक्रिया के तहत चल रहे उपयोगकर्ता नाम से अलग है
बेन आरोनसन

@BenAaronson यह प्रश्न कुछ भी नहीं कहता है कि उपयोगकर्ता नाम एक प्रक्रिया क्या है। मुझे वर्तमान में डोमेन यूजरनेम में लॉग इन की जरूरत थी और एक खोज ने मुझे इस पृष्ठ पर ला दिया, इस कोड ने मुझे वही दिया जो मुझे आवश्यक था।
डैनियल ई।


9

System.Windows.Forms.SystemInformation.UserNameउपयोगकर्ता में वास्तव में लॉग इन के लिए उपयोग करें क्योंकि Environment.UserNameअभी भी चालू प्रक्रिया द्वारा उपयोग किए जा रहे खाते को लौटाता है।


साझा करने के लिए धन्यवाद, यह भी देखें: System.Windows.Forms.SystemInformation.UserDomainName
आशीष सिंह

9

यदि कोई व्यक्ति मेरे जैसे उपयोगकर्ता नाम के विपरीत उपयोगकर्ता प्रदर्शन नाम की तलाश में है।

यहाँ इलाज है:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

System.DirectoryServices.AccountManagementअपनी परियोजना में संदर्भ जोड़ें ।


6

मैंने पिछले सभी उत्तरों की कोशिश की है और इनमें से कोई भी मेरे लिए काम करने के बाद MSDN पर उत्तर नहीं मिला है। मेरे लिए सही एक के लिए 'UserName4' देखें।

मैं लॉग इन यूजर के बाद हूं , जैसा कि प्रदर्शित किया गया है:

<asp:LoginName ID="LoginName1" runat="server" />

यहाँ एक छोटा सा कार्य है जो मैंने उन सभी को आजमाने के लिए लिखा है। मेरा परिणाम प्रत्येक पंक्ति के बाद टिप्पणियों में है।

protected string GetLoggedInUsername()
{
    string UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM
    String UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM
    String UserName3 = Environment.UserName; // Gives SYSTEM
    string UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in <ASP:Login />)
    string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM
    return UserName4;
}

इस फ़ंक्शन को कॉल करने से लॉग इन उपयोगकर्ता नाम वापस आ जाता है।

अद्यतन: मैं यह बताना चाहूंगा कि इस कोड को मेरे स्थानीय सर्वर उदाहरण पर चलाने से मुझे पता चलता है कि Username4 रिटर्न "" (एक रिक्त स्ट्रिंग), लेकिन UserName3 और UserName5 उपयोगकर्ता में लॉग इन लौटाता है। बस कुछ सावधान रहना है।


मेरी वेबसाइट IIS का उपयोग कर रही है, लेकिन जब मैं नेटवर्क के भीतर किसी अन्य कंप्यूटर से पृष्ठ पर जाता हूं, तो मैं "नेटवर्क सेवा" को उपयोगकर्ता नाम के रूप में देखता रहता हूं। मैंने सभी अलग-अलग विकल्पों की कोशिश की, लेकिन यह मुझे उस उपयोगकर्ता में लॉग इन नहीं देता है जो पेज देख रहा है। कोई उपाय?
Si8

3
नोट: यह स्पष्ट नहीं किया गया है, लेकिन उपरोक्त उदाहरण IIS में चल रहे एक वेब एप्लिकेशन के संदर्भ में लागू होता है, जहां उनमें से कई ASP.Net एप्लिकेशन पूल को निष्पादित करने वाले सर्वर विंडो खाते का नाम प्रदर्शित करेंगे। यदि इंटरेक्टिव प्रोग्राम या विंडोज सर्विस के रूप में चल रहा है, तो HttpContext से कोई भी अनुपलब्ध होगा, और दूसरों में से एक का उपयोग उस खाते को खोजने के लिए किया जाना चाहिए जिसके तहत प्रक्रिया निष्पादित होती है।
Oskar Berggren

4

यहाँ कोड है (लेकिन C # में नहीं):

Private m_CurUser As String

Public ReadOnly Property CurrentUser As String
    Get
        If String.IsNullOrEmpty(m_CurUser) Then
            Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()

            If who Is Nothing Then
                m_CurUser = Environment.UserDomainName & "\" & Environment.UserName
            Else
                m_CurUser = who.Name
            End If
        End If
        Return m_CurUser
    End Get
End Property

यहाँ कोड है (अब C # में भी):

private string m_CurUser;

public string CurrentUser
{
    get
    {
        if(string.IsNullOrEmpty(m_CurUser))
        {
            var who = System.Security.Principal.WindowsIdentity.GetCurrent();
            if (who == null)
                m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
            else
                m_CurUser = who.Name;
        }
        return m_CurUser;
    }
}

मान लीजिए C # में उत्तर दिया जाना है
शिवम भारद्वाज

4

इसे इस्तेमाल करे

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];

अब यह बेहतर लग रहा है


3

वर्तमान Windows उपयोगकर्ता नाम प्राप्त करें:

using System;

class Sample
{
    public static void Main()
    {
        Console.WriteLine();

        //  <-- Keep this information secure! -->
        Console.WriteLine("UserName: {0}", Environment.UserName);
    }
}

मेरी वेबसाइट IIS का उपयोग कर रही है, लेकिन जब मैं नेटवर्क के भीतर किसी अन्य कंप्यूटर से पृष्ठ पर जाता हूं, तो मैं "नेटवर्क सेवा" को उपयोगकर्ता नाम के रूप में देखता रहता हूं। मैंने सभी अलग-अलग विकल्पों की कोशिश की, लेकिन यह मुझे उस उपयोगकर्ता में लॉग इन नहीं देता है जो पेज देख रहा है। कोई उपाय?
Si8

2

एक विंडोज फॉर्म ऐप के लिए जिसे कई उपयोगकर्ताओं को वितरित किया जाना था, जिनमें से कई वीपीएन पर लॉग इन करते हैं, मैंने कई तरीकों की कोशिश की थी जो सभी मेरे स्थानीय मशीन परीक्षण के लिए काम करते थे लेकिन दूसरों के लिए नहीं। मुझे एक Microsoft लेख आया जिसे मैंने अनुकूलित किया और काम किया।

using System;
using System.Security.Principal;

namespace ManageExclusion
{
    public static class UserIdentity

    {
        // concept borrowed from 
        // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx

        public static string GetUser()
        {
            IntPtr accountToken = WindowsIdentity.GetCurrent().Token;
            WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken);
            return windowsIdentity.Name;
        }
    }
}

1

मामले में यह दूसरों के लिए मददगार है, जब मैंने c # .net 3.5 ऐप से विजुअल स्टूडियो 2017 में एक ऐप को अपग्रेड किया, तो कोड की यह लाइन User.Identity.Name.Substring(4);इस त्रुटि को फेंक देती है " startIndex स्ट्रिंग की लंबाई से बड़ी नहीं हो सकती है " (यह पहले नहीं भूल गया था)।

जब मैंने इसे Windows उपयोगकर्ता में लॉग इन करने और डोमेन भाग के बिना System.Security.Principal.WindowsIdentity.GetCurrent().Nameउपयोग Environment.UserName;करने के लिए समाप्त किया तो यह खुश था ।


धन्यवाद @doreen आपको यह उपयोगी लगा।
शिवम भारद्वाज

0

मैं यहाँ अधिकांश उत्तरों पर गया और उनमें से किसी ने भी मुझे सही उपयोगकर्ता नाम नहीं दिया।

मेरे मामले में मैं एक अलग उपयोगकर्ता से अपना ऐप चलाते समय, उपयोगकर्ता नाम में लॉग इन करना चाहता था, जैसे कि जब किसी फ़ाइल पर शिफ्ट + राइट क्लिक करें और "एक अलग उपयोगकर्ता के रूप में चलाएँ"।

मैंने जिन उत्तरों की कोशिश की, उन्होंने मुझे 'अन्य' उपयोगकर्ता नाम दिया।

यह ब्लॉग पोस्ट उपयोगकर्ता नाम में लॉग इन करने के लिए एक रास्ता प्रदान करता है, जो मेरे परिदृश्य में भी काम करता है:
https://smbadiwe.github.io/post/track-activities-windows-service/

इसमें वाट्सएप का इस्तेमाल होता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.