2008-09-26 19 views
9

मैं कैसे पता लगा सकता हूं कि मेरा प्रोग्राम सक्रिय निर्देशिका वातावरण में चलता है या नहीं?मैं कैसे पता लगा सकता हूं कि मेरा प्रोग्राम सक्रिय निर्देशिका वातावरण में चलता है या नहीं?

मैं उपयोग कर रहा हूँ सी # और नेट 2.0

उत्तर

2

एक तरह से LOGONSERVER पर्यावरण चर क्वेरी करने के लिए हो सकता है। इससे आपके एडी नियंत्रक का सर्वर नाम मिलेगा ... जो, जहां तक ​​मुझे पता है, खाली हो जाएगा (या वर्तमान वर्कस्टेशन से मेल खाता है? सुनिश्चित नहीं है) अगर यह वर्तमान में किसी डोमेन में लॉग इन नहीं है।

उदाहरण उपयोग:

string ADServer = Environment.GetEnvironmentVariable("LOGONSERVER"); 
+2

यह एक मशीन भी नाम हो सकता है अगर कंप्यूटर किसी भी डोमेन –

7

Environment.UserDomainName हो रही है और Environment.MachineName के साथ उसकी तुलना की कोशिश करो। यदि दोनों समान हैं तो संभवतः उपयोगकर्ता के पास डोमेन नहीं है। यदि वे समान नहीं हैं तो उपयोगकर्ता उस डोमेन में लॉग इन होता है जिसमें निर्देशिका सर्वर होना चाहिए।

1

http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.path.aspx

से LDAP का उपयोग कर मौजूदा डोमेन के लिए बाध्य करने के लिए, पथ "LDAP: // RootDSE" का उपयोग करें, तो डिफ़ॉल्ट नामकरण करते हुए संदर्भ मिलता है और प्रवेश rebind।

तो डोमेन के बिना "एलडीएपी: // रूट डीएसई" के लिए बाध्यकारी या तो कुछ भी विफल या वापस नहीं होना चाहिए। मैंने खुद के लिए कोशिश नहीं की।

use System.DirectoryServices; // add reference to system.directoryservices.dll 

... 

DirectoryEntry ent = new DirectoryEntry("LDAP://RootDSE"); 
String str = ent.Properties["defaultNamingContext"][0]; 
DirectoryEntry domain = new DirectoryEntry("LDAP://" + str); 

यह निश्चित रूप से एक वातावरण चर (जो उपयोगकर्ता को नष्ट या कार्यक्रम धोखा करने के लिए जोड़ सकते हैं) पर भरोसा करने की बजाय किसी सक्रिय निर्देशिका के लिए जाँच की एक क्लीनर तरीका है।

+1

+1 यह काम करता है का हिस्सा नहीं है, धन्यवाद। एकमात्र चीज यह है कि जब मशीन डोमेन सदस्य नहीं होती है तो यह COMException फेंकने से पहले लगभग 5 सेकंड तक प्रतीक्षा करती है। इसलिए 'Domain.GetComputerDomain() 'या' IPGlobalProperties.GetIPGlobalProperties()। डोमेन नाम' को कॉल करना बेहतर हो सकता है, तो यदि यह सफल होता है, तो ऐसा करें। – EMP

4

इस कोड की जाँच करेगा अगर कंप्यूटर अपने आप में एक डोमेन

using System.DirectoryServices.ActiveDirectory; 


bool isDomain = false; 

try 
{ 
    Domain.GetComputerDomain(); 
    isDomain = true; 
} 
catch (ActiveDirectoryObjectNotFoundException) 
{ 
} 

हालांकि कंप्यूटर किसी डोमेन में हो सकता है के एक सदस्य है, लेकिन वर्तमान में उपयोगकर्ता के प्रवेश एक स्थानीय उपयोगकर्ता खाता हो सकता है। आप इस प्रयोग के लिए जाँच करने के लिए Domain.GetCurrentDomain() समारोह

+1

मुझे स्थानीय उपयोगकर्ता के साथ लॉग इन होने पर झूठा लगता है, डोमेन उपयोगकर्ता के साथ लॉग इन होने पर सत्य ... – vIceBerg

+0

सक्रिय निर्देशिका के बिना NT4 डोमेन के बारे में क्या? – VVS

+1

यह अच्छा है, लेकिन मूर्खतापूर्ण नहीं है: 'ActiveDirectoryObjectNotFoundException' भी किसी भी कारण से डोमेन नियंत्रक से संपर्क नहीं किया जा सकता है, भले ही मशीन डोमेन सदस्य हो। – EMP

1

मैं कुछ है कि काम करता है पाया चाहते हैं:

System.Net.NetworkInformation उपयोग करते हुए;

IPGlobalProperties.GetIPGlobalProperties() DomainName।

किसी स्थानीय उपयोगकर्ता और एक डोमेन उपयोगकर्ता के साथ

काम करता है।

+0

वादा करता है, लेकिन दस्तावेज़ में टिप्पणी थोड़ा सा विषय है: "यदि किसी डोमेन में एक स्थानीय कंप्यूटर पंजीकृत है और फिर कार्यसमूह में बदल जाता है, तो डोमेन नाम संपत्ति अभी भी पिछले डोमेन नाम को खाली नहीं करती है" [http: // msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalproperties.domainname.aspx] – EMP

संबंधित मुद्दे

 संबंधित मुद्दे