C# 以编程方式创建具有指定.net版本的iis 6.0网站和应用程序池
我需要在iis 6.0(Windows server 2003 r2 sp2)中创建一个新网站,并使用.net framework 4.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,
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();