c# - আমি কীভাবে বর্তমান ব্যবহারকারীর নাম ব্যবহার করব।




.net (12)

আমি কীভাবে বর্তমান ব্যবহারকারীর নাম ব্যবহার করব।


Environment.UserName এর জন্য ডকুমেন্টেশনটি কিছুটা দ্বন্দ্বজনক বলে মনে হচ্ছে:

পরিবেশ। ব্যবহারকারীর সম্পত্তি

একই পৃষ্ঠায় এটি বলে:

বর্তমানে উইন্ডোজ অপারেটিং সিস্টেমে লগইন করা ব্যক্তিটির ব্যবহারকারী নাম পান।

এবং

বর্তমান থ্রেড শুরু করে এমন ব্যক্তির নামটি প্রদর্শন করে

আপনি RunAs ব্যবহার করে Environment.UserName পরীক্ষা করলে এটি আপনাকে RunAs ব্যবহারকারীর অ্যাকাউন্ট নাম দেবে, ব্যবহারকারীর মূলত উইন্ডোজটিতে লগইন করা হয়নি।


আপনি ব্যবহার করার চেষ্টা করতে পারেন:

Environment.UserName;

এটার মত...:

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

এই সহায়ক হয়েছে আশা করি।


আমি পুরোপুরি অন্যান্য উত্তর দ্বিতীয়, কিন্তু আমি আরো একটি পদ্ধতি হাইলাইট করতে চাই যা বলে

String UserName = Request.LogonUserIdentity.Name;

উপরের পদ্ধতিটি আমাকে ফরম্যাটে ব্যবহারকারীর নামটি ফেরত দিয়েছে: DomainName \ UserName । উদাহরণস্বরূপ, ইউরোপ \ ব্যবহারকারী নাম

যা থেকে ভিন্ন:

String UserName = Environment.UserName;

যা বিন্যাসে প্রদর্শিত: ব্যবহারকারী নাম

এবং পরিশেষে:

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

যা দিয়েছে: NT AUTHORITY\IUSR (আইআইএস সার্ভারে অ্যাপ্লিকেশন চালানোর সময়) এবং DomainName\UserName (স্থানীয় সার্ভারে অ্যাপ্লিকেশন চালানোর সময়)।


আমি পূর্বের সকল উত্তর চেষ্টা করেছি এবং এমএসডিএন-এ আমার কোনও উত্তর দেওয়ার পরে উত্তরটি খুঁজে পেয়েছি। আমার জন্য সঠিক একর জন্য '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;
}

এই ফাংশন কলিং ফিরে দ্বারা লগইন ব্যবহারকারীর নাম।

আপডেট: আমি স্থানীয় কোড সার্ভারে এই কোডটি চালানোর বিষয়টি দেখিয়ে দিতে চাই যে ব্যবহারকারীর নাম 4 "" (একটি খালি স্ট্রিং) প্রদান করে, তবে ব্যবহারকারীর নাম 3 এবং ব্যবহারকারীর নাম 5 ব্যবহারকারীর লগ ইন করে। শুধু সচেতন কিছু।


উইন্ডোজ ফরমস অ্যাপ্লিকেশনের জন্য যা বেশ কয়েকজন ব্যবহারকারীকে বিতরণ করা হয়েছিল, যার মধ্যে অনেকে ভিপিএন-এ লগ ইন করেছেন, আমি বেশ কয়েকটি উপায় চেষ্টা করেছি যা আমার স্থানীয় মেশিন পরীক্ষার জন্য কাজ করেছে কিন্তু অন্যদের জন্য নয়। আমি একটি মাইক্রোসফ্ট নিবন্ধ জুড়ে যে আমি অভিযোজিত এবং কাজ করে।

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 # এ নয়):

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;
    }
}

এটি অন্যের জন্য সহায়ক হলে, যখন আমি সি # .নেট 3.5 অ্যাপ থেকে ভিজ্যুয়াল স্টুডিও 2017 এ একটি অ্যাপ্লিকেশন আপগ্রেড করি তখন User.Identity.Name.Substring(4); কোডটি User.Identity.Name.Substring(4); এর এই লাইনটি User.Identity.Name.Substring(4); এই ত্রুটিটি ছুড়ে ফেলে " start ইন্ডেক্স স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে বড় হতে পারে না " (এটি আগে আগে বোল করা হয়নি)।

যখন আমি এটি System.Security.Principal.WindowsIdentity.GetCurrent().Name পরিবর্তন করেছিলাম তখনই খুশি হল System.Security.Principal.WindowsIdentity.GetCurrent().Name তবে আমি Environment.UserName; ব্যবহার করে শেষ করেছি System.Security.Principal.WindowsIdentity.GetCurrent().Name Environment.UserName; উইন্ডোজ ব্যবহারকারী লগ ইন এবং ডোমেইন অংশ ছাড়া।


প্রকৃতপক্ষে লগ ইন ব্যবহারকারীর জন্য Environment.UserName হিসাবে System.Windows.Forms.SystemInformation.UserName ব্যবহার করুন। System.Windows.Forms.SystemInformation.UserName এখনও বর্তমান প্রক্রিয়া দ্বারা ব্যবহৃত অ্যাকাউন্টটি ফেরত দেয়।


ব্যবহার করুন:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

যে লগন নাম হবে।


যদি কেউ আমার মত ব্যবহারকারীর নামটির বিরোধিতা করে তবে ব্যবহারকারীর নাম নাম খুঁজছেন।

এখানে চিকিত্সা:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

আপনার প্রকল্পে System.DirectoryServices.AccountManagement উল্লেখ রেফারেন্স যোগ করুন।


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

String myUserName = Environment.UserName

এটি আপনাকে আউটপুট দেবে - your_user_name





.net