views:

1053

answers:

2

I need to read a website's folders using WMI and C# in IIS 6.0. I am able to read the Virtual directories and applications using the "IISWebVirtualDirSetting" class. However the physical folders located inside a website cannot be read using this class.

And for my case i need to read sub folders located within a website and later on set permission on them. For my requirement i dont need to work on Virtual Directories/Web Service Applications (which can be easily obtained using the code below..).

I have tried to use IISWebDirectory class but it has been useful.

Here is the code that reads IIS Virtual Directories...

public static ArrayList RetrieveVirtualDirList(String ServerName, String WebsiteName)
{
    ConnectionOptions options = SetUpAuthorization();
    ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISV2", ServerName), options);
    scope.Connect();
    String SiteId = GetSiteIDFromSiteName(ServerName, WebsiteName);
    ObjectQuery OQuery = new ObjectQuery(@"SELECT * FROM IISWebVirtualDirSetting");
    //ObjectQuery OQuery = new ObjectQuery(@"SELECT * FROM IIsSetting");

    ManagementObjectSearcher WebSiteFinder = new ManagementObjectSearcher(scope, OQuery);
    ArrayList WebSiteListArray = new ArrayList();
    ManagementObjectCollection WebSitesCollection = WebSiteFinder.Get();
    String WebSiteName = String.Empty;
    foreach (ManagementObject WebSite in WebSitesCollection)
    {
        WebSiteName = WebSite.Properties["Name"].Value.ToString();
        WebsiteName = WebSiteName.Replace("W3SVC/", "");
        String extrctedSiteId = WebsiteName.Substring(0, WebsiteName.IndexOf('/'));
        String temp = WebsiteName.Substring(0, WebsiteName.IndexOf('/') + 1);
        String VirtualDirName = WebsiteName.Substring(temp.Length);
        WebsiteName = WebsiteName.Replace(SiteId, "");
        if (extrctedSiteId.Equals(SiteId))
        //if (true)
        {
            WebSiteListArray.Add(VirtualDirName );
            //WebSiteListArray.Add(WebSiteName);
            //+ "|" + WebSite.Properties["Path"].Value.ToString()
        }
    }
    return WebSiteListArray;
}

P.S:

I need to programmatically get the sub folders of an already deployed site(s) using WMI and C# in an ASP. Net Application. I need to find out the sub folders of existing websites in a local or remote IIS 6.0 Web Server. So i require a programmatic solution. Precisely if i am pointed at the right class (like IISWebVirtualDirSetting etc ) that i may use for retrieving the list of physical folders within a website then it will be quite helpful.

I am not working in Powershell and i don't really need a solution that involves powershell or vbscripts.

Any alternative programmatic way of doing the same in C#/ASP.Net will also be highly appreciated.

A: 

Have you looked at the Web Deployment Tool?

http://www.iis.net/expand/WebDeploy

Ability to package ACLs, COM, GAC and registry settings.

Raj Kaimal
Thanks for the reply.I wonder how this tool is gonna help me or asist me in some way.???I need to programmatically get the sub folders of an already deployed site(s) using WMI and C# in an ASP. Net Application. I need to find out the sub folders of existing websites in a local or remote IIS 6.0 Web Server. I don't think that am doing any thing that has something to do with this web deployment tool. So if you would kindly enlighten me...plz...
Steve Johnson
A: 

Never mind. i got it myself. If the directory structure is on local system the System.IO.DirectoryInfo is what is needed. Using remoting the same can be used for remote server as well.

Reference: http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx

If WMi has to be there then Win32_Directory is the class which should used in query:

"Select * from Win32_directory where drive ='"+ DriveLetter +":' and Path ='%" + MyPath + "%'";

Reference: http://msdn.microsoft.com/en-us/library/aa394130(VS.85).aspx

Steve Johnson