///
<summary>
///
本方法创建一个站点(当然,创建虚拟目录也完全没有任何问题,做法类似),并设置IIS中ASP.NET版本为2.0
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
button1_Click(
object
sender, EventArgs e)
{
//
站点名称和物理路径
String webSiteName
=
"
mengxianhui
"
;
String pathToRoot
=
@"
c:/mengxianhui
"
;
DirectoryEntry root
=
new
DirectoryEntry(
"
IIS://localhost/W3SVC
"
);
//
Find unused ID value for new web site
int
siteID
=
1
;
//
得到现有的站点标识
foreach
(DirectoryEntry entry
in
root.Children)
{
if
(entry.SchemaClassName
==
"
IIsWebServer
"
)
{
int
ID
=
Convert.ToInt32(entry.Name);
if
(ID
>=
siteID)
{
siteID
=
ID
+
1
;
}
}
}
//
利用配置文件的做法创建站点,需要先停止原来的服务,以便能够顺利写入数据
label1.Text
=
"
正在停止服务……
"
;
Application.DoEvents();
System.ServiceProcess.ServiceController mobServiceController3
=
new
System.ServiceProcess.ServiceController(
"
IISAdmin
"
);
foreach
(System.ServiceProcess.ServiceController dependentService
in
mobServiceController3.DependentServices)
{
switch
(dependentService.Status)
{
case
ServiceControllerStatus.Stopped:
break
;
case
ServiceControllerStatus.StopPending:
dependentService.WaitForStatus(ServiceControllerStatus.Stopped);
break
;
default
:
dependentService.Stop();
dependentService.WaitForStatus(ServiceControllerStatus.Stopped);
break
;
}
}
if
(mobServiceController3.Status
!=
ServiceControllerStatus.Stopped)
{
mobServiceController3.Stop();
mobServiceController3.WaitForStatus(ServiceControllerStatus.Stopped);
}
//
确保服务完全停止
label1.Text
=
"
停止服务完成!
"
;
Application.DoEvents();
String ConfigPath
=
System.Environment.SystemDirectory
+
@"
/inetsrv/MetaBase.xml
"
;
System.Xml.XmlDocument doc
=
new
System.Xml.XmlDocument();
doc.Load(ConfigPath);
System.Xml.XmlNamespaceManager xnm
=
new
System.Xml.XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace(
"
mxh
"
,
"
urn:microsoft-catalog:XML_Metabase_V64_0
"
);
//
得到最大的网站的标识,要在其后面加入节点
string
SiteLocation
=
"
/LM/W3SVC/
"
+
(siteID
-
1
);
System.Xml.XmlNode LastWebServer
=
doc.SelectSingleNode(
"
/mxh:configuration/mxh:MBProperty/mxh:IIsWebVirtualDir[@Location='
"
+
SiteLocation
+
"
/root']
"
, xnm);
if
(LastWebServer
==
null
)
{
MessageBox.Show(
"
没有现有的 Web 服务器。
"
);
doc
=
null
;
return
;
}
//
找到AdminACL设置,每次都是变化的 -_-!
System.Xml.XmlNode LastWebServerFilter
=
doc.SelectSingleNode(
"
/mxh:configuration/mxh:MBProperty/mxh:IIsFilters[@Location='
"
+
SiteLocation
+
"
/filters']/@AdminACL
"
, xnm);
if
(LastWebServer
==
null
)
{
MessageBox.Show(
"
没有现有的 Web 服务器 filters。
"
);
doc
=
null
;
return
;
}
String LastWebServerFilterAdminAcl
=
LastWebServerFilter.Value;
//
创建新站点
label1.Text
=
"
创建新站点……
"
;
Application.DoEvents();
String NewSiteID
=
"
/LM/W3SVC/
"
+
siteID.ToString();
System.Xml.XmlNode NewWebServer
=
doc.CreateNode(System.Xml.XmlNodeType.Element,
""
,
"
IIsWebServer
"
,
"
urn:microsoft-catalog:XML_Metabase_V64_0
"
);
System.Xml.XmlAttribute NewWebServerLocation
=
doc.CreateAttribute(
"
Location
"
);
NewWebServerLocation.Value
=
NewSiteID;
NewWebServer.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AuthFlags
"
);
NewWebServerLocation.Value
=
"
0
"
;
NewWebServer.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
ServerAutoStart
"
);
NewWebServerLocation.Value
=
"
TRUE
"
;
NewWebServer.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
ServerBindings
"
);
NewWebServerLocation.Value
=
"
:802:
"
;
NewWebServer.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
ServerComment
"
);
NewWebServerLocation.Value
=
webSiteName;
NewWebServer.Attributes.Append(NewWebServerLocation);
LastWebServer.ParentNode.InsertAfter(NewWebServer, LastWebServer);
System.Xml.XmlNode NewWebServerFilter
=
doc.CreateNode(System.Xml.XmlNodeType.Element,
""
,
"
IIsFilters
"
,
"
urn:microsoft-catalog:XML_Metabase_V64_0
"
);
NewWebServerLocation
=
doc.CreateAttribute(
"
Location
"
);
NewWebServerLocation.Value
=
NewSiteID
+
"
/filters
"
;
NewWebServerFilter.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AdminACL
"
);
NewWebServerLocation.Value
=
LastWebServerFilterAdminAcl;
NewWebServerFilter.Attributes.Append(NewWebServerLocation);
NewWebServer.ParentNode.InsertAfter(NewWebServerFilter, NewWebServer);
System.Xml.XmlNode IIsWebVirtualDir
=
doc.CreateNode(System.Xml.XmlNodeType.Element,
""
,
"
IIsWebVirtualDir
"
,
"
urn:microsoft-catalog:XML_Metabase_V64_0
"
);
NewWebServerLocation
=
doc.CreateAttribute(
"
Location
"
);
NewWebServerLocation.Value
=
NewSiteID
+
"
/root
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AccessFlags
"
);
NewWebServerLocation.Value
=
"
AccessRead | AccessScript
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AppFriendlyName
"
);
NewWebServerLocation.Value
=
"
默认应用程序
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AppIsolated
"
);
NewWebServerLocation.Value
=
"
2
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AppRoot
"
);
NewWebServerLocation.Value
=
NewSiteID
+
"
/Root
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
AuthFlags
"
);
NewWebServerLocation.Value
=
"
AuthAnonymous | AuthNTLM
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
//
关于权限,可以任意组合
NewWebServerLocation
=
doc.CreateAttribute(
"
DirBrowseFlags
"
);
NewWebServerLocation.Value
=
"
DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc
"
;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerLocation
=
doc.CreateAttribute(
"
Path
"
);
NewWebServerLocation.Value
=
pathToRoot;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
//
为安全起见,下面的系统文件夹需要使用程序的方法获取,如System.Environment.SystemDirectory,和System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
//
这里为了简单期间,直接写入
string
ScriptMaps
=
@"
.asp,C:/WINDOWS/system32/inetsrv/asp.dll,5,GET,HEAD,POST,TRACE
.cer,C:/WINDOWS/system32/inetsrv/asp.dll,5,GET,HEAD,POST,TRACE
.cdx,C:/WINDOWS/system32/inetsrv/asp.dll,5,GET,HEAD,POST,TRACE
.asa,C:/WINDOWS/system32/inetsrv/asp.dll,5,GET,HEAD,POST,TRACE
.idc,C:/WINDOWS/system32/inetsrv/httpodbc.dll,5,GET,POST
.shtm,C:/WINDOWS/system32/inetsrv/ssinc.dll,5,GET,POST
.shtml,C:/WINDOWS/system32/inetsrv/ssinc.dll,5,GET,POST
.stm,C:/WINDOWS/system32/inetsrv/ssinc.dll,5,GET,POST
.asax,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.ascx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.ashx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.asmx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.aspx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.axd,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.vsdisco,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.rem,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.soap,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.config,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.cs,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.csproj,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.vb,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.vbproj,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.webinfo,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.licx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.resx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.resources,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.xoml,C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.rules,C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.master,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.skin,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.compiled,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.browser,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.mdb,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.jsl,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.vjsproj,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.sitemap,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.msgx,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.ad,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.dd,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.ldd,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.sd,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.cd,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.adprototype,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.lddprototype,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.sdm,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.sdmDocument,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.ldb,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.svc,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
.mdf,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.ldf,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.java,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.exclude,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
.refresh,c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
"
;
NewWebServerLocation
=
doc.CreateAttribute(
"
ScriptMaps
"
);
NewWebServerLocation.Value
=
ScriptMaps;
IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);
NewWebServerFilter.ParentNode.InsertAfter(IIsWebVirtualDir, NewWebServerFilter);
doc.Save(ConfigPath);
doc
=
null
;
label1.Text
=
"
创建站点完成!
"
;
mobServiceController3
=
null
;
mobServiceController3
=
new
System.ServiceProcess.ServiceController(
"
w3svc
"
);
mobServiceController3.Start();
mobServiceController3.WaitForStatus(ServiceControllerStatus.Running);
mobServiceController3
=
null
;
label1.Text
=
"
恭喜你,全部工作完成!
"
;
MessageBox.Show(
"
恭喜你,全部工作完成!
"
);
}