जवाबों:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserName
"RunAs" उपयोगकर्ता को लौटाएगा।
MessageBox.Show(Environment.UserName);
इसे अपने window_loaded
ईवेंट में डालें , और इसे रनर्स का उपयोग करके चलाएं ....
Domain\Username
। मैं उपयोगकर्ता नाम से जुड़ा नाम कैसे प्राप्त कर सकता हूं?
यदि आप उपयोगकर्ताओं के नेटवर्क में हैं, तो उपयोगकर्ता नाम अलग होगा:
Environment.UserName
- Will Display format : 'Username'
बजाय
System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'
इच्छित प्रारूप चुनें।
Environment.UserDomainName + "\\" + Environment.UserName
रूप में समान रूप से परिणाम प्राप्त करने के लिए उपयोग कर सकते हैं System.Security.Principal.WindowsIdentity.GetCurrent().Name
। अब, क्या अंतर है, आप पूछते हैं ... मुझे यकीन नहीं है।
System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
के बाद Split
कॉल करने से पहलेLast()
ToArray()
की जरूरत है। आप using System.Linq;
हालांकि की आवश्यकता होगी ।
संपत्ति का प्रयास करें Environment.UserName
:।
string userName = Environment.UserName;
Environment.UsernName
है, लॉग-इन खाता-नाम देता है, लेकिन WindowsIdentity.GetCurrent().Name
खाता-नाम लौटा रहा है जो अनुप्रयोग के रूप में चल रहा है।
पर्यावरण के लिए प्रलेखन। उपयोगकर्ता नाम थोड़ा परस्पर विरोधी प्रतीत होता है:
पर्यावरण। उपयोगकर्ता नाम संपत्ति
उसी पृष्ठ पर यह कहता है:
उस व्यक्ति का उपयोगकर्ता नाम प्राप्त करता है जो वर्तमान में विंडोज ऑपरेटिंग सिस्टम पर लॉग ऑन है।
तथा
उस व्यक्ति का उपयोगकर्ता नाम प्रदर्शित करता है जिसने वर्तमान धागा शुरू किया था
यदि आप RunAs का उपयोग करके Environment.UserName का परीक्षण करते हैं, तो यह आपको RunAs उपयोगकर्ता खाते का नाम देगा, न कि उपयोगकर्ता जो मूल रूप से Windows पर लॉग ऑन है।
मैं अन्य उत्तरों से पूरी तरह से अलग हूं, लेकिन मैं एक और विधि पर प्रकाश डालना चाहूंगा जो कहती है
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
(स्थानीय सर्वर पर एप्लिकेशन चलाते समय)।
Request
केवल तभी काम करता है जब आप एक वेब एप्लिकेशन हो। इसका उदाहरण हैSystem.Web.HttpRequest
उपयोग:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
वह लॉगऑन नाम होगा।
मैंने मौजूदा उत्तरों से कई संयोजनों की कोशिश की, लेकिन वे मुझे दे रहे थे
DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool
मैंने उपयोग करना समाप्त कर दिया
string vUserName = User.Identity.Name;
जिसने मुझे केवल वास्तविक उपयोगकर्ता डोमेन उपयोगकर्ता नाम दिया।
String myUserName = Environment.UserName
यह आपको आउटपुट देगा - your_user_name
System.Windows.Forms.SystemInformation.UserName
उपयोगकर्ता में वास्तव में लॉग इन के लिए उपयोग करें क्योंकि Environment.UserName
अभी भी चालू प्रक्रिया द्वारा उपयोग किए जा रहे खाते को लौटाता है।
मैंने पिछले सभी उत्तरों की कोशिश की है और इनमें से कोई भी मेरे लिए काम करने के बाद 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 उपयोगकर्ता में लॉग इन लौटाता है। बस कुछ सावधान रहना है।
यहाँ कोड है (लेकिन 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;
}
}
इसे इस्तेमाल करे
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
अब यह बेहतर लग रहा है
वर्तमान Windows उपयोगकर्ता नाम प्राप्त करें:
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
// <-- Keep this information secure! -->
Console.WriteLine("UserName: {0}", Environment.UserName);
}
}
एक विंडोज फॉर्म ऐप के लिए जिसे कई उपयोगकर्ताओं को वितरित किया जाना था, जिनमें से कई वीपीएन पर लॉग इन करते हैं, मैंने कई तरीकों की कोशिश की थी जो सभी मेरे स्थानीय मशीन परीक्षण के लिए काम करते थे लेकिन दूसरों के लिए नहीं। मुझे एक 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;
}
}
}
मामले में यह दूसरों के लिए मददगार है, जब मैंने c # .net 3.5 ऐप से विजुअल स्टूडियो 2017 में एक ऐप को अपग्रेड किया, तो कोड की यह लाइन User.Identity.Name.Substring(4);
इस त्रुटि को फेंक देती है " startIndex स्ट्रिंग की लंबाई से बड़ी नहीं हो सकती है " (यह पहले नहीं भूल गया था)।
जब मैंने इसे Windows उपयोगकर्ता में लॉग इन करने और डोमेन भाग के बिना System.Security.Principal.WindowsIdentity.GetCurrent().Name
उपयोग Environment.UserName;
करने के लिए समाप्त किया तो यह खुश था ।
मैं यहाँ अधिकांश उत्तरों पर गया और उनमें से किसी ने भी मुझे सही उपयोगकर्ता नाम नहीं दिया।
मेरे मामले में मैं एक अलग उपयोगकर्ता से अपना ऐप चलाते समय, उपयोगकर्ता नाम में लॉग इन करना चाहता था, जैसे कि जब किसी फ़ाइल पर शिफ्ट + राइट क्लिक करें और "एक अलग उपयोगकर्ता के रूप में चलाएँ"।
मैंने जिन उत्तरों की कोशिश की, उन्होंने मुझे 'अन्य' उपयोगकर्ता नाम दिया।
यह ब्लॉग पोस्ट उपयोगकर्ता नाम में लॉग इन करने के लिए एक रास्ता प्रदान करता है, जो मेरे परिदृश्य में भी काम करता है:
https://smbadiwe.github.io/post/track-activities-windows-service/
इसमें वाट्सएप का इस्तेमाल होता है
Environment.UserName
?