/// <summary>
/// 创建虚拟目录
/// </summary>
/// <param name="WebSite">服务器站点名称</param>
/// <param name="VDirName">虚拟目录名称</param>
/// <param name="Path"></param>
/// <param name="RootDir"></param>
/// <param name="chkRead"></param>
/// <param name="chkWrite"></param>
/// <param name="chkExecute"></param>
/// <param name="chkScript"></param>
/// <param name="chkAuth"></param>
/// <param name="webSiteNum">1</param>
/// <param name="serverName">localhost</param>
/// <returns></returns>
public static bool CreateVDir(string WebSite, string VDirName, string Path, bool RootDir, bool chkRead, bool chkWrite, bool chkExecute, bool chkScript, bool chkAuth, int webSiteNum, string serverName, out string sRet)
{
sRet = String.Empty;
try
{
System.DirectoryServices.DirectoryEntry IISSchema;
System.DirectoryServices.DirectoryEntry IISAdmin;
System.DirectoryServices.DirectoryEntry VDir;
bool IISUnderNT; //
// 确定IIS版本
//
IISSchema = new System.DirectoryServices.DirectoryEntry("IIS://" + serverName + "/Schema/AppIsolated");
if (IISSchema.Properties["Syntax"].Value.ToString().ToUpper() == "BOOLEAN")
IISUnderNT = true;
else
IISUnderNT = false;
IISSchema.Dispose(); //
// Get the admin object
// 获得管理权限
//
IISAdmin = new System.DirectoryServices.DirectoryEntry("IIS://" + serverName + "/W3SVC/" + webSiteNum + "/" + WebSite); //
// If we're not creating a root directory
// 如果我们不能创建一个根目录
//
if (!RootDir)
{
//
// If the virtual directory already exists then delete it
// 如果虚拟目录已经存在则删除
foreach (System.DirectoryServices.DirectoryEntry v in IISAdmin.Children)
{
if (v.Name == VDirName)
{
// Delete the specified virtual directory if it already exists
//try
//{
// IISAdmin.Invoke("Delete", new string[] { v.SchemaClassName, VDirName });
// IISAdmin.CommitChanges();
//}
//catch (Exception ex)
//{
// sRet += ex.Message;
//}
sRet = "虚拟目录已存在!";
return false;
}
}
}
//
// Create the virtual directory
// 创建一个虚拟目录
//
if (!RootDir)
{
VDir = IISAdmin.Children.Add(VDirName, "IIsWebVirtualDir");
}
else
{
VDir = IISAdmin;
} //
// Setup the VDir
// 安装虚拟目录
//
VDir.Properties["AccessRead"][0] = chkRead;
VDir.Properties["AccessExecute"][0] = chkExecute;
VDir.Properties["AccessWrite"][0] = chkWrite;
VDir.Properties["AccessScript"][0] = chkScript;
VDir.Properties["AuthNTLM"][0] = chkAuth;
VDir.Properties["EnableDefaultDoc"][0] = true;
VDir.Properties["EnableDirBrowsing"][0] = false;
VDir.Properties["DefaultDoc"][0] = "Default.aspx";
VDir.Properties["Path"][0] = Path; //
// NT doesn't support this property
// NT格式不支持这特性
//
if (!IISUnderNT)
{
VDir.Properties["AspEnableParentPaths"][0] = true;
} //
// Set the changes
// 设置改变
//
VDir.CommitChanges(); //
// Make it a web application
// 创建一个web应用
//
if (IISUnderNT)
{
VDir.Invoke("AppCreate", false);
}
else
{
VDir.Invoke("AppCreate", 1);
}
return true;
}
catch (Exception ex)
{
sRet = ex.Message;
return false;
}
}
/// <summary>
/// 判断目录是否存在
/// </summary>
/// <param name="serverName">localhost</param>
/// <param name="vDirName">虚拟目录名称</param>
/// <param name="webSiteNum">1</param>
/// <returns></returns>
public static bool ExistsIIS(string serverName, string vDirName, int webSiteNum)
{
bool result = false;
System.DirectoryServices.DirectoryEntry IISAdmin;
IISAdmin = new System.DirectoryServices.DirectoryEntry("IIS://" + serverName + "/W3SVC/" + webSiteNum + "/Root");
foreach (System.DirectoryServices.DirectoryEntry v in IISAdmin.Children)
{
if (v.Name == vDirName)
{
result = true;
}
}
return result;
}
/// <summary>
/// 删除虚拟目录
/// </summary>
/// <param name="serverName">localhost</param>
/// <param name="vDirName">虚拟目录名称</param>
/// <param name="webSiteNum">1</param>
/// <returns></returns>
public static void DeleteIIS(string serverName, string vDirName, int webSiteNum)
{
System.DirectoryServices.DirectoryEntry IISAdmin;
IISAdmin = new System.DirectoryServices.DirectoryEntry("IIS://" + serverName + "/W3SVC/" + webSiteNum + "/Root");
foreach (System.DirectoryServices.DirectoryEntry v in IISAdmin.Children)
{
if (v.Name == vDirName)
{ // Delete the specified virtual directory if it already exists
try
{
IISAdmin.Invoke("Delete", new string[] { v.SchemaClassName, vDirName });
IISAdmin.CommitChanges();
}
catch (Exception ex)
{
throw;
}
}
}
}