C#在IIS中创建站点和虚拟目录(源码下载)
首先需要引用
using System.DirectoryServices;
以下为创建IIS站点和虚拟目录的主要类代码(全部源码下载)< p>
/// <summary>
/// 获取新网站ID
/// </summary>
/// <returns></returns>
private string GetNewWebSiteID()
{
int iWebSiteCount = 0;
DirectoryEntry siteEntry = new DirectoryEntry("IIS://localhost/w3svc");
foreach (DirectoryEntry childEntry in siteEntry.Children)
{
if (childEntry.SchemaClassName == "IIsWebServer") iWebSiteCount++;
}
return (iWebSiteCount + 1).ToString();
}
/// <summary>
/// 获取新站点端口,默认为当前最大端口号加一
/// </summary>
/// <returns></returns>
private string GetNewSitePort()
{
int iDefault = 8000;
DirectoryEntry siteEntry = new DirectoryEntry("IIS://localhost/w3svc");
foreach (DirectoryEntry childEntry in siteEntry.Children)
{
if (childEntry.SchemaClassName == "IIsWebServer")
{
if (childEntry.Properties["ServerBindings"].Value != null)
{
string strSettings = childEntry.Properties["ServerBindings"].Value.ToString();
int iSettingPort = int.Parse(strSettings.Substring(strSettings.IndexOf(':') + 1, (strSettings.LastIndexOf(':') - strSettings.IndexOf(':') - 1)));
iDefault = iSettingPort > iDefault ? iSettingPort : iDefault;
}
}
}
return (iDefault + 1).ToString();
}
/// <summary>
/// 判断网站是否已经存在
/// </summary>
/// <param name="strSiteName"></param>
/// <returns></returns>
private bool IsExist(string strSiteName)
{
bool blExist = false;
DirectoryEntry siteEntry = new DirectoryEntry("IIS://localhost/w3svc");
foreach (DirectoryEntry childEntry in siteEntry.Children)
{
if (childEntry.SchemaClassName == "IIsWebServer")
{
if (childEntry.Properties["ServerComment"].Value != null)
{
if (childEntry.Properties["ServerComment"].Value.ToString() == strSiteName) blExist = true;
}
}
}
return blExist;
}
/// <summary>
/// 创建网站
/// </summary>
/// <param name="strPort"></param>
/// <param name="strSiteName"></param>
/// <param name="strFilePath"></param>
/// <returns></returns>
private DirectoryEntry CreateNewSite(string strSiteName, string strFilePath)
{
try
{
strSitePort = GetNewSitePort();
DirectoryEntry deyRoot = new DirectoryEntry("IIS://localhost/w3svc");
DirectoryEntry siteEntry = deyRoot.Children.Add(GetNewWebSiteID(), "IIsWebServer");
siteEntry.Properties["ServerComment"].Value = strSiteName;
siteEntry.Properties["ServerBindings"].Value = String.Format("{0}:{1}:{2}", "", strSitePort, "");
siteEntry.Properties["ServerAutoStart"].Value = true;
//添加虚拟目录,网站本身没有路径,默认的路径即名称为Root的虚拟目录
DirectoryEntry rootEntry = siteEntry.Children.Add("Root", "IIsWebVirtualDir");
rootEntry.Properties["Path"].Value = strFilePath; //文件夹路径
rootEntry.Properties["AccessRead"][0] = true; //读取权限
rootEntry.Properties["AccessExecute"][0] = false; //执行(如ISAPI应用程序或CGI)
rootEntry.Properties["AccessWrite"][0] = true; //写入
rootEntry.Properties["AccessScript"][0] = true; //执行脚本(如ASP)
rootEntry.Properties["EnableDirBrowsing"][0] = true; //浏览
rootEntry.Properties["DefaultDoc"][0] = "UserLogin.aspx,Default.aspx"; //设置默认文档,多值情况下中间用逗号分割
rootEntry.CommitChanges(); siteEntry.CommitChanges(); return rootEntry;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString() + "站点创建失败!"); return null;
}
}
/// <summary>
/// 创建虚拟目录
/// </summary>
/// <param name="strDirName">虚拟目录名称</param>
/// <param name="strDirPath">虚拟目录路径</param>
/// <param name="siteEntry">要创建虚拟目录的原站点</param>
/// <returns></returns>
private bool CreateVirtualDirectory(string strDirName, string strDirPath, DirectoryEntry rootEntry)
{
try
{
DirectoryEntry childEntry = rootEntry.Children.Add(strDirName, "IIsWebVirtualDir");
childEntry.Invoke("AppCreate", true);
childEntry.Properties["Path"].Value = strDirPath;// @"D:\公司项目\盘县联网\SafetyProduce\SafetyNet\"; //文件夹路径
childEntry.Properties["AppFriendlyName"][0] = strDirName;//应用程序名称
childEntry.Properties["AccessRead"][0] = true; //读取权限
childEntry.Properties["AccessExecute"][0] = false; //执行(如ISAPI应用程序或CGI)
childEntry.Properties["AccessWrite"][0] = true; //写入
childEntry.Properties["AccessScript"][0] = true; //执行脚本(如ASP)
childEntry.Properties["EnableDirBrowsing"][0] = true; //浏览
childEntry.Properties["DefaultDoc"][0] = "UserLogin.aspx,Default.aspx"; ////设置默认文档,多值情况下中间用逗号分割
childEntry.CommitChanges(); rootEntry.CommitChanges(); return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString() + "虚拟目录" + strDirName + "创建失败!"); return false;
}
}
以下为调用代码
//创建站点
DirectoryEntry rootEntry = CreateNewSite("天科行业主管平台", strDirectoryPath + "WebPage");
if (rootEntry != null)
{
//创建虚拟目录
CreateVirtualDirectory("SafetyNet", strDirectoryPath + "SafetyNet", rootEntry);
CreateVirtualDirectory("SafetySupervise", strDirectoryPath + "SafetySupervise", rootEntry);
}
DirectoryEntry rootEntry = CreateNewSite("天科行业主管平台", strDirectoryPath + "WebPage");
if (rootEntry != null)
{
//创建虚拟目录
CreateVirtualDirectory("SafetyNet", strDirectoryPath + "SafetyNet", rootEntry);
CreateVirtualDirectory("SafetySupervise", strDirectoryPath + "SafetySupervise", rootEntry);
}