2009-03-20 23 views
7

मुझे अपनी अनइंस्टॉल विधि के हिस्से के रूप में .NET से वर्चुअल निर्देशिका और एप्लिकेशन पूल को हटाने की आवश्यकता है। मैंने कहीं वेब पर निम्न कोड मिला:मैं आईआईएस ऑब्जेक्ट्स को सी # से कैसे हटा सकता हूं?

private static void DeleteTree(string metabasePath) 
    { 
     // metabasePath is of the form "IIS://<servername>/<path>" 
     // for example "IIS://localhost/W3SVC/1/Root/MyVDir" 
     // or "IIS://localhost/W3SVC/AppPools/MyAppPool" 
     Console.WriteLine("Deleting {0}:", metabasePath); 

     try 
     { 
      DirectoryEntry tree = new DirectoryEntry(metabasePath); 
      tree.DeleteTree(); 
      tree.CommitChanges(); 
      Console.WriteLine("Done."); 
     } 
     catch (DirectoryNotFoundException) 
     { 
      Console.WriteLine("Not found."); 
     } 
    } 

लेकिन यह एक COMExceptiontree.CommitChanges(); पर फेंक रहा है। क्या मुझे इस लाइन की ज़रूरत है? क्या यह एक सही दृष्टिकोण है?

+1

क्या आप पूर्ण COMException पेस्ट कर सकते हैं? – Kev

+0

आपको वास्तव में इन प्रकार की चीजों को करने के लिए विंडोज इंस्टालर का उपयोग करना चाहिए। आईआईएस ऑब्जेक्ट्स को स्वचालित रूप से बनाने और निकालने के लिए विक्स ने फ़ंक्शंस में बनाया है। –

+0

@ जेसे - विक्स का उपयोग करके आप मौजूदा लोगों को चुनने के बजाय उपयोगकर्ताओं को एक नए ऐप पूल/वेबसाइट/वीडीआईआर के लिए संकेत दे सकते हैं (वीएस वेब सेटअप प्रोजेक्ट केवल आपको मौजूदा आईआईएस ऑब्जेक्ट्स चुनने देता है)? – Kev

उत्तर

6

आप इस तरह के आवेदन पूल, वर्चुअल निर्देशिका या आईआईएस अनुप्रयोगों के रूप में वस्तुओं को हटा रहे हैं, तो आप इस तरह यह सब करने की ज़रूरत:

string appPoolPath = "IIS://Localhost/W3SVC/AppPools/MyAppPool"; 
using(DirectoryEntry appPool = new DirectoryEntry(appPoolPath)) 
{ 
    using(DirectoryEntry appPools = 
       new DirectoryEntry(@"IIS://Localhost/W3SVC/AppPools")) 
    { 
     appPools.Children.Remove(appPool); 
     appPools.CommitChanges(); 
    } 
} 

आप आइटम आप तो बनाने हटाना चाहते हैं के लिए एक DirectoryEntry वस्तु बनाने अपने माता-पिता के लिए DirectoryEntry। फिर आप उस वस्तु को हटाने के लिए अभिभावक को बताएं।

आप भी इस रूप में अच्छी तरह कर सकते हैं:

string appPoolPath = "IIS://Localhost/W3SVC/AppPools/MyAppPool"; 
using(DirectoryEntry appPool = new DirectoryEntry(appPoolPath)) 
{ 
    using(DirectoryEntry parent = appPool.Parent) 
    { 
     parent.Children.Remove(appPool); 
     parent.CommitChanges(); 
    } 
} 

कार्य हाथ में मैं किसी भी विधि का उपयोग करेंगे पर निर्भर करता है।

+0

क्या माता-पिता को पाने का कोई आसान तरीका है, जब मेरे पास बच्चे DirectoryEntry है? appPool.Parent काम करेगा? – Grzenio

+0

appPool.Parent ठीक काम करेगा। – Kev

+0

"ऐपपूलपाथ" vrs "appPoolPath" के साथ मामूली आवरण समस्या। उस महान उत्तर के अलावा – Simon

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