using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Data;
using System.Data.SqlClient;
using System.Configuration.Install;
using System.Management;
using System.Collections;
using Microsoft.Win32;
using System.Collections.Specialized;
public partial class _Default : System.Web.UI.Page
{
private System.Data.SqlClient.SqlConnection sqlConn;
private System.Data.SqlClient.SqlCommand Command;
private string DBName;
private string ServerName;
private string AdminName;
private string AdminPwd;
private string iis;
private string port;
private string dir;
public static string VirDirSchemaName = "IIsWebVirtualDir";
private string _target;
private DirectoryEntry _iisServer;
private ManagementScope _scope;
private ConnectionOptions _connection;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
port = "9000";
iis = "localhost";
// 添加网站
Connect();
// 下面的信息为测试,可以自己编写文本框来接收用户输入信息
string serverID = "1980";
string serverComment = "loncomip";
string defaultVrootPath = @"c:/asp";
if (defaultVrootPath.EndsWith(@"/"))
{
defaultVrootPath = defaultVrootPath.Substring(0, defaultVrootPath.Length - 1);
}
string HostName = "";
string IP = "";
string Port = port;
string sReturn = CreateWebSite(serverID, serverComment, defaultVrootPath, HostName, IP, Port);
//设置网站属性
SetWebsite(serverComment);
}
#region CreateWebsite 添加网站
public string CreateWebSite(string serverID, string serverComment, string defaultVrootPath, string HostName, string IP, string Port)
{
try
{
ManagementObject oW3SVC = new ManagementObject(_scope, new ManagementPath(@"IIsWebService='W3SVC'"), null);
if (IsWebSiteExists(serverID))
{
return "网站已存在.";
}
ManagementBaseObject inputParameters = oW3SVC.GetMethodParameters("CreateNewSite");
ManagementBaseObject[] serverBinding = new ManagementBaseObject[1];
serverBinding[0] = CreateServerBinding(HostName, IP, Port);
inputParameters["ServerComment"] = serverComment;
inputParameters["ServerBindings"] = serverBinding;
inputParameters["PathOfRootVirtualDir"] = defaultVrootPath;
inputParameters["ServerId"] = serverID;
ManagementBaseObject outParameter = null;
outParameter = oW3SVC.InvokeMethod("CreateNewSite", inputParameters, null);
// 启动网站
string serverName = "W3SVC/" + serverID;
ManagementObject webSite = new ManagementObject(_scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);
webSite.InvokeMethod("Start", null);
return (string)outParameter.Properties["ReturnValue"].Value;
}
catch (Exception ex)
{
return ex.Message;
}
}
public ManagementObject CreateServerBinding(string HostName, string IP, string Port)
{
try
{
ManagementClass classBinding = new ManagementClass(_scope, new ManagementPath("ServerBinding"), null);
ManagementObject serverBinding = classBinding.CreateInstance();
serverBinding.Properties["Hostname"].Value = HostName;
serverBinding.Properties["IP"].Value = IP;
serverBinding.Properties["Port"].Value = Port;
serverBinding.Put();
return serverBinding;
}
catch(Exception ex)
{
//return null;
throw new Exception(ex.Message);
}
}
/// <summary>
/// 设置网站相关信息
/// </summary>
private void SetWebsite(string serverComment)
{
//获取刚建立WEB站点
DirectoryEntry folderRootA = GetIISWebserver(serverComment);
//返回根虚拟目录,为了设置网站的相关属性
DirectoryEntry folderRoot = new DirectoryEntry(folderRootA.Path + "/Root");
folderRoot.Properties["AccessRead"][0] = true;//允许读的权限
folderRoot.Properties["AccessWrite"][0] = true;//允许写的权限
folderRoot.Properties["AccessScript"][0] = true;//脚本可执行
folderRoot.Properties["AccessSource"][0] = true;//不允许读取源程序
folderRoot.Properties["AccessExecute"][0] = false;//允许执行的权限
folderRoot.Properties["AuthAnonymous"][0] = true;//允许匿名访问
folderRoot.Properties["AuthNTLM"][0] = true;//允许windows集成验证
folderRoot.Properties["ContentIndexed"][0] = true;//索引此资源
folderRoot.Properties["DefaultDoc"][0] = "login.aspx";//默认文档
folderRoot.Properties["EnableDefaultDoc"][0] = true;//设置默认文档
folderRoot.Properties["AspEnableParentPaths"][0] = true;//允许父路径
folderRoot.Properties["AppIsolated"][0] = 2;//应用程序保护
folderRoot.Properties["AppFriendlyName"][0] = serverComment;
folderRoot.CommitChanges();
}
#endregion
#region Connect 连接IIS服务器
public bool Connect()
{
if (iis == null)
return false;
try
{
_iisServer = new DirectoryEntry("IIS://" + iis + "/W3SVC/1");
_target = iis;
_connection = new ConnectionOptions();
_scope = new ManagementScope(@"//" + iis + @"/root/MicrosoftIISV2", _connection);
_scope.Connect();
}
catch
{
return false;
}
return IsConnected();
}
public bool IsConnected()
{
if (_target == null || _connection == null || _scope == null) return false;
return _scope.IsConnected;
}
#endregion
#region IsWebSiteExists 判断网站是否已经存在
public bool IsWebSiteExists(string serverID)
{
try
{
string siteName = "W3SVC/" + serverID;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(_scope, new ObjectQuery("SELECT * FROM IIsWebServer"), null);
ManagementObjectCollection webSites = searcher.Get();
foreach (ManagementObject webSite in webSites)
{
if ((string)webSite.Properties["Name"].Value == siteName)
return true;
}
return false;
}
catch
{
return false;
}
}
#endregion
#region GetNextOpenID 获得一个新的ServerID
private int GetNextOpenID()
{
DirectoryEntry iisComputer = new DirectoryEntry("IIS://localhost/w3svc");
int nextID = 0;
foreach (DirectoryEntry iisWebServer in iisComputer.Children)
{
string sname = iisWebServer.Name;
try
{
int name = int.Parse(sname);
if (name > nextID)
{
nextID = name;
}
}
catch
{
}
}
return ++nextID;
}
#endregion
/**/
/// <summary>
/// 返回指定的IISWebServer
/// </summary>
/// <param name="ServerComment"></param>
/// <returns></returns>
private DirectoryEntry GetIISWebserver(string ServerComment)
{
ServerComment = ServerComment.Trim();
DirectoryEntry Service = new DirectoryEntry("IIS://" + iis + "/W3SVC");
DirectoryEntry Server = null;
IEnumerator ie = Service.Children.GetEnumerator();
string comment;
while (ie.MoveNext())
{
Server = (DirectoryEntry)ie.Current;
if (Server.SchemaClassName == "IIsWebServer")
{
comment = Server.Properties["ServerComment"][0].ToString().ToLower().Trim();
if (comment == ServerComment.ToLower())
{
return Server;
}
}
}
return null;
}
}
.net程序建立并设置IIS站点或虚拟目录
最新推荐文章于 2024-01-01 16:57:18 发布