virtual directory properties in c#

1

I did a quick search and got this link From StackOverflow

I get this error message "Unknown error (0x80005000)" when it hits

bool canCreate = !(schema.Properties["Syntax"].Value.ToString().ToUpper() == "BOOLEAN");

My requirement is to create a virtual directory and set AccessRead, IsolationMode, Scripts and Executables, ApplicationProtection to medium.


Got it to work, here is the code:

Note: I still couldn't get it to work on windows 7, it throws the same error and the message includes reference to System.InterOp... At the moment I don't care about getting it to work on windows 7, I deployed it on windows 2003, it works.

public void CreateVirtualDirectory(string virtualdirectory, string physicalpath)
{
    try
    {
        ///check if path exists
        if (!Directory.Exists(physicalpath))
        {
            Log(string.Format(@"CreateVirtualDirectory; Path not found - {0}", physicalpath));
            return;
        }

        DirectoryEntry parent = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/1/Root", Environment.MachineName));
        foreach (System.DirectoryServices.DirectoryEntry v in parent.Children)
        {
            if (v.Name == virtualdirectory)
            {
                try
                {
                    parent.Invoke("Delete", new string[] { v.SchemaClassName, virtualdirectory });
                }
                catch
                {
                }
            }
        }
        DirectoryEntry newFolder = (DirectoryEntry)parent.Invoke("Create", "IIsWebVirtualDir", virtualdirectory);
        newFolder.InvokeSet("Path", physicalpath);
        newFolder.Invoke("AppCreate", false);
        newFolder.InvokeSet("AppFriendlyName", virtualdirectory);

        const int MEDIUM_POOL = 2;

        newFolder.Properties["AccessRead"][0] = true;
        newFolder.Properties["AccessExecute"][0] = true;
        newFolder.Properties["AccessWrite"][0] = false;
        newFolder.Properties["AccessScript"][0] = true;
        newFolder.Properties["AuthNTLM"][0] = true;
        newFolder.Properties["AppIsolated"].Clear();
        newFolder.Properties["AppIsolated"].Add(MEDIUM_POOL);

        newFolder.CommitChanges();
    }
    catch (Exception ex)
    {
        Log(string.Format(@"CreateVirtualDirectory '{0}' failed; {1}", virtualdirectory, ex.Message));
    }
}
c#
asked on Stack Overflow Nov 11, 2011 by GaneshT • edited May 23, 2017 by Community

1 Answer

1

You're using DirectoryEntry to create websites which requires IIS Compat Mode to be installed/configured in IIS. That's compat mode for the IIS6 directory entry interfaces if you're on IIS7 or later.

If it's not installed, you'll get 80005000.

If you're on IIS7 or later (Windows Server 2008 or Vista and later), the newer (non-compat mode) approach is the new managed Microsoft.Web.Administration.

http://blogs.msdn.com/b/carlosag/archive/2006/04/17/microsoftwebadministration.aspx

answered on Stack Overflow Nov 11, 2011 by bryanmac • edited Feb 11, 2013 by jdecuyper

User contributions licensed under CC BY-SA 3.0