C#

2010-10-28 13 views
8

में उपयोगकर्ता नाम पर लॉग इन करें मैं विंडोज 7 में उपयोगकर्ता नाम पर वर्तमान लॉग इन कैसे प्राप्त करूं (यानी वह उपयोगकर्ता जो कंसोल पर भौतिक रूप से लॉग ऑन है जिसमें प्रोग्राम मैं लॉन्च कर रहा हूं) चल रहा है।C#

उदाहरण के लिए यदि मैं "मेनयूसर" के रूप में लॉग ऑन हूं और अपने कंसोल एप्लिकेशन (जो उपयोगकर्ता नाम पर लॉग इन प्रदर्शित करेगा) को "सबयूसर" के रूप में चलाएगा, तो प्रोग्राम केवल वर्तमान में लॉग ऑन उपयोगकर्ता के रूप में "सबयूसर" लौटाता है।

मैंने उपयोगकर्ता नाम प्राप्त करने के लिए निम्न 2 तकनीकों का उपयोग किया। दोनों मुझे वह चीज़ नहीं मिल रहे हैं जो मैं चाहता हूं। जहाँ से इस स्क्रिप्ट को चलाने की जाती है कि हालांकि, इस VBScript कोड वापस लौटा उपयोगकर्ता नाम उपयोगकर्ता खाते पर ध्यान दिए बिना लॉग ऑन

System.Environment.GetEnvironmentVariable("USERNAME") 
System.Security.Principal.WindowsIdentity.GetCurrent().User; 

नोट:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set compsys_arr = objWMIService.ExecQuery _ 
    ("Select * from Win32_ComputerSystem") 
For Each sys in compsys_arr 
    Wscript.Echo "username: " & sys.UserName 
Next 

किसी भी जिस तरह से यह सी # में संभव है?

+1

http://forums.whirlpool.net.au/archive/793434 देखें। मुझे लगता है कि आप कोड बदल सकते हैं ताकि यह आपके वीबीस्क्रिप्ट के लिए बिल्कुल फिट हो सके। – weismat

+1

वह वीबीस्क्रिप्ट मेरे लिए काम नहीं करता है (Win2003 सर्वर के विरुद्ध चल रहा है)। साथ ही, यदि उपयोगकर्ता ने आपके प्रोग्राम को किसी भिन्न उपयोगकर्ता खाते के अंतर्गत चलाने का विकल्प चुना है, तो * आप * इसे क्यों अनदेखा करना चाहते हैं? –

+0

@ डेमियन, मुझे लॉग ऑन उपयोगकर्ता के आधार पर कार्यक्रम में निर्णय लेने की ज़रूरत है, यही कारण है कि! – Santhosh

उत्तर

6

मुझे लगता है कि डब्लूएमआई कॉल को सी # कार्यों में परिवर्तित करना सिर्फ मेरे लिए ठीक है।

  ConnectionOptions oConn = new ConnectionOptions(); 
      System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\\\localhost", oConn); 


      System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select * from Win32_ComputerSystem"); 
      ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery); 
      ManagementObjectCollection oReturnCollection = oSearcher.Get(); 

      foreach (ManagementObject oReturn in oReturnCollection) { 
       Console.WriteLine(oReturn["UserName"].ToString().ToLower()); 
      } 
2

Altough मुझे समझ में नहीं आता कि क्या आप उपयोगकर्ता नाम प्राप्त करना चाहते हैं, जो सिस्टम पर लॉग ऑन है या उपयोगकर्ता नाम जिसके अंतर्गत कंसोल चल रहा है - शायद आप सिस्टम का उपयोग करने का प्रयास कर सकते हैं। पर्यावरण। उपयोगकर्ता नाम - एमएसडीएन का दावा है कि यह लॉग इन उपयोगकर्ता नाम दिखाता है।

+0

मुझे उस उपयोगकर्ता का नाम चाहिए जो सिस्टम पर लॉग ऑन है। System.Environment.UserName केवल उपयोगकर्ता नाम देता है जिसके अंतर्गत प्रोग्राम चल रहा है। – Santhosh

5

मुझे लगता है कि आपको एक पी/आमंत्रण मार्ग नीचे जाना होगा। आपको यह पता लगाना होगा कि कौन सी विंडोस्टेशन आपकी प्रक्रिया के भीतर चल रही है, और फिर उस विंडोस्टेशन के मालिक को निर्धारित करें। मुझे नहीं लगता कि इन चीजों को निर्धारित करने के लिए एक .NET एपीआई है।

Win32 एपीआई जिन्हें आप देखना चाहते हैं, शायद GetProcessWindowStation और GetUserObjectSecurity स्वामी को खोजने के लिए हैं।

+1

यह गलत है। विंडो स्टेशन के सुरक्षा डिस्क्रिप्टर के पास लॉग ऑन करने वाले उपयोगकर्ता के साथ कुछ लेना देना नहीं है। कोई संबंध संयोग है और इस तथ्य के साथ करना है कि उपयोगकर्ता को विंडो स्टेशन तक पहुंच की आवश्यकता है। – wj32

1

आप अपने सत्र का उपयोगकर्ता नाम चाहते हैं। आप ProcessIdToSessionId पर कॉल करके अपना सत्र आईडी ढूंढ सकते हैं। फिर उपयोगकर्ता नाम खोजने के लिए WTSQuerySessionInformation का उपयोग करें।