C# 以编程方式创建具有指定.net版本的iis 6.0网站和应用程序池

C# 以编程方式创建具有指定.net版本的iis 6.0网站和应用程序池,c#,iis,.net-4.0,web,application-pool,C#,Iis,.net 4.0,Web,Application Pool,我需要在iis 6.0(Windows server 2003 r2 sp2)中创建一个新网站,并使用.net framework 4.0创建一个新的虚拟目录,并将其分配给创建的网站 这是我的密码: public static int CreateWebSite(string webSiteName, string PhysicalPath, string PortNumber, string HostHeader, string DefaultDoc, string appPoolName,

我需要在iis 6.0(Windows server 2003 r2 sp2)中创建一个新网站,并使用.net framework 4.0创建一个新的虚拟目录,并将其分配给创建的网站

这是我的密码:

public static int CreateWebSite(string webSiteName, string PhysicalPath, string PortNumber, string HostHeader, string DefaultDoc, string appPoolName, out string errorMessage)
    {
        errorMessage = string.Empty;
        try
        {
            DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");
            // Find unused ID value for new web site
            int siteID = 1;
            foreach (DirectoryEntry e in root.Children)
            {
                if (e.SchemaClassName == "IIsWebServer")
                {
                    int ID = Convert.ToInt32(e.Name);
                    if (ID >= siteID)
                    {
                        siteID = ID + 1;
                    }
                }
            }

            DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
            site.Invoke("Put", "ServerComment", webSiteName);
            site.Invoke("Put", "KeyType", "IIsWebServer");

            site.Invoke("Put", "ServerBindings", ":" + PortNumber + ":" + HostHeader);

            site.Invoke("Put", "ServerState", 2);
            site.Invoke("Put", "FrontPageWeb", 1);
            site.Invoke("Put", "DefaultDoc", DefaultDoc);

            site.Invoke("Put", "ServerAutoStart", 1);
            site.Invoke("Put", "ServerSize", 1);
            site.Invoke("SetInfo");

            DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");

            if (appPoolName != "")
            {
                object[] param = { 0, appPoolName, true };
                siteVDir.Invoke("AppCreate3", param);
            }

            siteVDir.Properties["AppIsolated"][0] = 2;

            siteVDir.Properties["Path"][0] = PhysicalPath;

            siteVDir.Properties["AccessFlags"][0] = 513;
            siteVDir.Properties["AspEnableParentPaths"][0] = true;
            siteVDir.Properties["AppFriendlyName"][0] = webSiteName;
            siteVDir.Properties["FrontPageWeb"][0] = 1;
            siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/Root";
            siteVDir.Properties["AppFriendlyName"][0] = "Root";
            siteVDir.Properties["AspSessionTimeout"][0] = "60";
            siteVDir.Properties["AuthFlags"].Value = 4;//integrity windows Authentication checked
            siteVDir.Properties["AuthAnonymous"][0] = true;//Anonymouse uncheck
            siteVDir.Properties["HttpErrors"].Add("401,1,FILE," + PhysicalPath + "/Lib/CustomError/SSOLoginError.htm");
            siteVDir.Properties["HttpErrors"].Add("401,2,FILE," + PhysicalPath + "/Lib/CustomError/SSOLoginError.htm");
            siteVDir.Properties["HttpErrors"].Add("401,3,FILE," + PhysicalPath + "/Lib/CustomError/SSOLoginError.htm");
            siteVDir.Properties["HttpErrors"].Add("401,4,FILE," + PhysicalPath + "/Lib/CustomError/SSOLoginError.htm");
            siteVDir.Properties["HttpErrors"].Add("401,5,FILE," + PhysicalPath + "/Lib/CustomError/SSOLoginError.htm");
            siteVDir.Properties["HttpErrors"].Add("401,7,FILE," + PhysicalPath + "/Lib/CustomError/SSOLoginError.htm");

            //For SSO, Set special settings for  WinLogin.aspx page -- This has beed added after version 8.1.1001
            DirectoryEntry deLoginDir;
            deLoginDir = siteVDir.Children.Add("WinLogin.aspx", siteVDir.SchemaClassName);
            deLoginDir.Properties["AuthAnonymous"][0] = false;//Anonymouse uncheck
            deLoginDir.Properties["AuthFlags"].Value = 4;//integrity windows Authentication checked
            deLoginDir.CommitChanges();
            ////////////////////////////////////////////

            siteVDir.CommitChanges();

            siteVDir.Invoke("AppDelete");
            siteVDir.Invoke("AppCreate", true);
            siteVDir.Invoke("AppEnable");

            site.CommitChanges();

            #region AssignApplicationPool

            DirectoryEntry vDir = new DirectoryEntry("IIS://localhost/W3SVC/" + siteID.ToString() + "/Root");
            string className = vDir.SchemaClassName.ToString();
            if (className.EndsWith("VirtualDir"))
            {
                object[] param = { 0, appPoolName, true };
                vDir.Invoke("AppCreate3", param);
                vDir.Properties["AppIsolated"][0] = "2";
                vDir.CommitChanges();
            }
            else
            {
                return -1;
            }

            if (Environment.OSVersion.Version.Major < 6)
            {
                try
                {
                    const string aspNetV1 = "1.0.3705";
                    const string aspNetV11 = "1.1.4322";
                    const string aspNetV2 = "2.0.50727";
                    const string aspNetV4 = "4.0.30319";
                    const string targetAspNetVersion = aspNetV4;

                    //loop through the script maps
                    for (var i = 0; i < siteVDir.Properties["ScriptMaps"].Count; i++)
                    {
                        //replace the versions if they exists
                        siteVDir.Properties["ScriptMaps"][i] =
                            siteVDir.Properties["ScriptMaps"][i].ToString().Replace(aspNetV1, targetAspNetVersion);
                        siteVDir.Properties["ScriptMaps"][i] =
                            siteVDir.Properties["ScriptMaps"][i].ToString().Replace(aspNetV11, targetAspNetVersion);
                        siteVDir.Properties["ScriptMaps"][i] =
                            siteVDir.Properties["ScriptMaps"][i].ToString().Replace(aspNetV2, targetAspNetVersion);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    errorMessage = ex.Message + Environment.NewLine + ex.StackTrace;
                }
            }
            else
            {
                string appPoolPath = @"IIS://localhost/W3SVC/AppPools/" + appPoolName;
                try
                {
                    var appPoolEntry = new DirectoryEntry(appPoolPath);
                    appPoolEntry.Properties["managedRuntimeVersion"].Value = "v4.0";
                    appPoolEntry.Invoke("SetInfo", null);
                    appPoolEntry.CommitChanges();
                    appPoolEntry.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    errorMessage = ex.Message + Environment.NewLine + ex.StackTrace;
                }

                siteVDir.CommitChanges();
                siteVDir.Close();
            }

            #endregion


            return siteID;
        }
        catch
        {
            return -1;
        }
    }
publicstaticintcreatewebsite(字符串webSiteName、字符串PhysicalPath、字符串PortNumber、字符串HostHeader、字符串DefaultDoc、字符串appPoolName、out字符串errorMessage)
{
errorMessage=string.Empty;
尝试
{
DirectoryEntry root=new DirectoryEntry(“IIS://localhost/W3SVC”);
//查找新网站未使用的ID值
int siteID=1;
foreach(root.Children中的目录条目e)
{
如果(例如,SchemaClassName==“IIsWebServer”)
{
int ID=Convert.ToInt32(即名称);
如果(ID>=站点ID)
{
siteID=ID+1;
}
}
}
DirectoryEntry站点=(DirectoryEntry)root.Invoke(“创建”、“IIsWebServer”、站点ID);
调用(“Put”、“ServerComment”、webSiteName);
调用(“Put”、“KeyType”、“IIsWebServer”);
调用(“Put”,“ServerBindings”,“:”+PortNumber+“:”+HostHeader);
调用(“放置”、“服务器状态”,2);
调用(“放置”、“FrontPageWeb”,1);
调用(“Put”、“DefaultDoc”、DefaultDoc);
调用(“Put”,“ServerAutoStart”,1);
调用(“放置”、“服务器大小”,1);
site.Invoke(“SetInfo”);
DirectoryEntry siteVDir=site.Children.Add(“Root”、“IISWebVirtualDir”);
如果(appPoolName!=“”)
{
对象[]参数={0,appPoolName,true};
调用(“AppCreate3”,参数);
}
siteVDir.Properties[“AppIsolated”][0]=2;
siteVDir.Properties[“路径”][0]=物理路径;
siteVDir.Properties[“AccessFlags”][0]=513;
siteVDir.Properties[“AspenableParentPath”][0]=true;
siteVDir.Properties[“AppFriendlyName”][0]=网站名;
siteVDir.Properties[“FrontPageWeb”][0]=1;
siteVDir.Properties[“AppRoot”][0]=“LM/W3SVC/”+siteID+“/Root”;
siteVDir.Properties[“AppFriendlyName”][0]=“Root”;
siteVDir.Properties[“AspSessionTimeout”][0]=“60”;
siteVDir.Properties[“AuthFlags”].Value=4;//已检查完整性windows身份验证
siteVDir.Properties[“AuthAnonymous”][0]=true;//取消选中Anonymouse
siteVDir.Properties[“HttpErrors”]。添加(“401,1,文件,“+PhysicalPath+”/Lib/CustomError/SSOLoginError.htm”);
Properties[“HttpErrors”]。添加(“401,2,文件,“+PhysicalPath+”/Lib/CustomError/SSOLoginError.htm”);
siteVDir.Properties[“HttpErrors”]。添加(“401,3,文件,“+PhysicalPath+”/Lib/CustomError/SSOLoginError.htm”);
Properties[“HttpErrors”]。添加(“401,4,文件,“+PhysicalPath+”/Lib/CustomError/SSOLoginError.htm”);
Properties[“HttpErrors”]。添加(“401,5,文件,“+PhysicalPath+”/Lib/CustomError/SSOLoginError.htm”);
Properties[“HttpErrors”]。添加(“401,7,文件,“+PhysicalPath+”/Lib/CustomError/SSOLoginError.htm”);
//对于SSO,为WinLogin.aspx页面设置特殊设置——这是在版本8.1.1001之后添加的
德洛金迪尔董事会;
deLoginDir=siteVDir.Children.Add(“WinLogin.aspx”,siteVDir.SchemaClassName);
deLoginDir.Properties[“AuthAnonymous”][0]=false;//Anonymouse取消选中
deLoginDir.Properties[“AuthFlags”].Value=4;//已检查完整性windows身份验证
deLoginDir.CommitChanges();
////////////////////////////////////////////
siteVDir.CommitChanges();
siteVDir.Invoke(“AppDelete”);
调用(“AppCreate”,true);
siteVDir.Invoke(“可上诉”);
site.CommitChanges();
#区域分配应用程序池
DirectoryEntry vDir=new DirectoryEntry(“IIS://localhost/W3SVC/”+siteID.ToString()+“/Root”);
字符串className=vDir.SchemaClassName.ToString();
if(className.EndsWith(“VirtualDir”))
{
对象[]参数={0,appPoolName,true};
调用(“AppCreate3”,参数);
vDir.Properties[“AppIsolated”][0]=“2”;
vDir.CommitChanges();
}
其他的
{
返回-1;
}
if(Environment.OSVersion.Version.Major<6)
{
尝试
{
常量字符串aspNetV1=“1.0.3705”;
常量字符串aspNetV11=“1.1.4322”;
常量字符串aspNetV2=“2.0.50727”;
常量字符串aspNetV4=“4.0.30319”;
常量字符串targetAspNetVersion=aspNetV4;
//循环浏览脚本映射
对于(var i=0;iDirectoryEntry sited = new DirectoryEntry(string.Format("IIS://localhost/w3svc/{0}/Root", websiteID.ToString()));
sited.Properties["AccessRead"].Add(true);
PropertyValueCollection testScriptMap = sited.Properties["ScriptMaps"];

object[] allValues = (object[])testScriptMap.Value;
object[] newValues = new object[allValues.Length];
string oldVersion = "v1.1.4322";
string newVersion = "v2.0.50727";
//... etc to 4.0.30319 .....
for (int i = 0; i < allValues.Length; i++)
{
    if (allValues[i] is string)
    {
        string temp = allValues[i] as string;
        if (temp.Contains(oldVersion))
        {
            newValues[i] = temp.Replace(oldVersion, newVersion);
        }
        else
        {
            newValues[i] = allValues[i];
        }

    }
    else
    {
        newValues[i] = allValues[i];
    }
}
testScriptMap.Value = newValues;

sited.CommitChanges();