2010-11-26 13 views
8

आज सुबह मैंने एक अच्छी विधि (DirectoryEntry.Exists) की खोज की, यह जांचने में सक्षम होना चाहिए कि सर्वर पर एक सक्रिय निर्देशिका ऑब्जेक्ट मौजूद है या नहीं। तो मैं एक साधारण के साथ करने की कोशिश की:DirectoryEntry.Exists को प्रमाण-पत्रों के साथ कैसे प्रदान करें?

if (DirectoryEntry.Exists(path)) {} 

बेशक यह किसी भी भार के अभाव है इसके साथ क्रेडेंशियल प्रदान करने। क्योंकि, अगर साख मैं इस अपवाद प्राप्त नहीं दिया जाता है:

लॉग ऑन विफलता: अज्ञात उपयोगकर्ता नाम या बुरा पासवर्ड। (System.DirectoryServices.DirectoryServicesCOMException)

क्या कोई अन्य विकल्प है कि मुझे ई सर्वर पर अपने कोड को प्रमाणित करने के संभावना प्रदान करता है है? या किसी वस्तु के अस्तित्व की जांच करने के लिए?

उत्तर

13

प्रदान नहीं करता है इस मामले में आप उपयोग नहीं कर सकते स्थिर विधि मौजूद है के रूप में आप ने कहा:

DirectoryEntry directoryEntry = new DirectoryEntry(path); 
directoryEntry.Username = "username"; 
directoryEntry.Password = "password"; 

bool exists = false; 
// Validate with Guid 
try 
{ 
    var tmp = directoryEntry.Guid; 
    exists = true; 
} 
catch (COMException) 
{ 
    exists = false; 
} 
+0

यह मेरा पसंदीदा समाधान होगा, लेकिन इस संपत्ति मेरे लिए स्थिर नहीं लगता है, एक नजर है: http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.username.aspx –

+0

ओह मैं कभी नहीं देखता हूँ। हां आपको एक नई निर्देशिका एंटर्री को इंस्टेंस करना होगा। संपादित। – JoeBilly

+0

एक अच्छा कोड नमूना के लिए धन्यवाद। जाहिर है कि यह एकमात्र तरीका है। यह एक पिटी है कि डिफ़ॉल्ट रूप से यह संभव नहीं है।नेट विधियों, लेकिन कम से कम एक अच्छा कामकाज नौकरी करता है! –

0

उपयोगकर्ता के लिए जो प्रक्रिया भाग गया DirectoryEntry.Exists कॉल करने के लिए अनुमति नहीं है, तो आप प्रतिरूपण उपयोग कर सकते हैं।

यह मददगार हो सकता है (एक ई संदर्भ में प्रतिरूपण की चर्चा): Btw http://www.codeproject.com/KB/system/everythingInAD.aspx

, अगर आप पहले से ही एक उपयोगकर्ता के लिए जो कि उपयोगकर्ता के साथ सब कुछ आप की जरूरत है, यही कारण है कि न सिर्फ प्रक्रिया की पहुंच है की साख है (उदाहरण के लिए /ऐसे दोड़ो)?

+0

धन्यवाद। पाया कि यह भी पसंद है, लेकिन मुझे मेरी समस्या का एक मूल समाधान प्रदान नहीं करता है। Runas वास्तव में मेरे वर्तमान प्रोजेक्ट में एक विकल्प नहीं है ... प्रतिरूपण न तो, लेकिन अब तक का सबसे अच्छा लगता है। –

1

तो सवाल का जवाब: असंभव।

अंत में निर्दिष्ट पहचान के साथ, distinguised नाम से DirectoryEntry प्राप्त करने के लिए एक स्वयं विधि लिखें। अस्तित्व/अक्षमता के दोनों मामलों में मुझे DirectoryEntry का एक उदाहरण मिला। यह जांचने के लिए कि क्या यह एक वैध ऑब्जेक्ट लौटा है, मैं एक आसान प्रयास करता हूं ... यह देखने के लिए पकड़ें कि क्या यह अपवाद में है या नहीं। यदि हां, तो यह अमान्य है।

गंदा चेक, लेकिन यह काम करता है। बहुत बुरा डिफ़ॉल्ट .net विधि DirectoryEntry.Exists सिर्फ DirectoryEntry निर्माता की तरह क्रेडेंशियल प्रदान करने एक अधिभार ...