文档库 最新最全的文档下载
当前位置:文档库 › C#操作IIS

C#操作IIS

C#操作IIS
C#操作IIS

对一些操作IIS进行一个简单的总结;主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作;首先要对Microsoft.W eb.Adm inistration 进行引用,它主要是用来操作IIS7;

using System.DirectoryServices;

using Microsoft.W eb.Adm inistration;

1:首先是对本版IIS的版本进行配置:

DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");

string Version =

getEntity.Properties["MajorIISVersionNumber"].Value.ToString();

MessageBox.Show("IIS版本为:" + Version);

2:是判断程序池是存在;

///

///判断程序池是否存在

///

///程序池名称

///true存在 false不存在

private bool IsAppPoolName(string AppPoolName)

{

bool result = false;

DirectoryEntry appPools = new

DirectoryEntry("IIS://localhost/W3SVC/AppPools");

foreach (DirectoryEntry getdir in appPools.Children)

{

if (https://www.wendangku.net/doc/0f12645702.html,.Equals(AppPoolName))

{

result = true;

}

}

return result;

}

3:删除应用程序池

///

///删除指定程序池

///

///程序池名称

///true删除成功 false删除失败

private bool DeleteAppPool(string AppPoolName)

{

bool result = false;

DirectoryEntry appPools = new

DirectoryEntry("IIS://localhost/W3SVC/AppPools");

foreach (DirectoryEntry getdir in appPools.Children)

{

if (https://www.wendangku.net/doc/0f12645702.html,.Equals(AppPoolName))

{

try {

getdir.DeleteTree();

result = true;

}

catch {

result = false;

}

}

}

return result;

}

4:创建应用程序池(对程序池的设置主要是针对IIS7;IIS7应用程序池托管模式主要包括集成跟经典模式,并进行NET版本的设置)

string AppPoolName = "LamAppPool";

if (!IsAppPoolName(AppPoolName))

{

DirectoryEntry newpool;

DirectoryEntry appPools = new

DirectoryEntry("IIS://localhost/W3SVC/AppPools");

newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool");

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

MessageBox.Show(AppPoolName + "程序池增加成功");

}

#endregion

#region修改应用程序的配置(包含托管模式及其NET运行版本) ServerManager sm = new ServerManager();

sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0";

sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated为集成 Classic为经典

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

MessageBox.Show(AppPoolName + "程序池托管管道模式:" +

sm.ApplicationPools[AppPoolName].ManagedPipelineMode.ToString() + "运行的NET版本为:" + sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion);

运用C#代码来对IIS7程序池托管管道模式及版本进行修改;

5:针对IIS6的NET版进行设置;因为此处我是用到NET4.0所以V4.0.30319 若是NET2.0则在这进行修改 v2.0.50727

//启动aspnet_regiis.exe程序

string fileName = Environment.GetEnvironmentVariable("windir") + @"\https://www.wendangku.net/doc/0f12645702.html,\Framework\v4.0.30319\aspnet_regiis.exe";

ProcessStartInfo startInfo = new ProcessStartInfo(fileName);

//处理目录路径

string path = vdEntry.Path.ToUpper();

int index = path.IndexOf("W3SVC");

path = path.Remove(0, index);

//启动ASPnet_iis.exe程序,刷新脚本映射

startInfo.Arguments = "-s " + path;

startInfo.WindowStyle = ProcessWindowStyle.Hidden;

https://www.wendangku.net/doc/0f12645702.html,eShellExecute = false;

startInfo.CreateNoWindow = true;

startInfo.RedirectStandardOutput = true;

startInfo.RedirectStandardError = true;

Process process = new Process();

process.StartInfo = startInfo;

process.Start();

process.WaitForExit();

string errors = process.StandardError.ReadToEnd();

6:平常我们可能还得对IIS中的MIME类型进行增加;下面主要是我们用到两个类型分别

是:xam l,xap

IISOle.MimeMapClass NewMime = new IISOle.MimeMapClass();

NewMime.Extension = ".xaml"; NewMime.MimeType =

"application/xaml+xml";

IISOle.MimeMapClass TwoMime = new IISOle.MimeMapClass();

TwoMime.Extension = ".xap"; TwoMime.MimeType =

"application/x-silverlight-app";

rootEntry.Properties["MimeMap"].Add(NewMime);

rootEntry.Properties["MimeMap"].Add(TwoMime);

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

7:下面是做安装时一段对IIS进行操作的代码;兼容IIS6及IIS7;新建虚拟目录并对相应的属性进行设置;对IIS7还进行新建程序池的程序;并设置程序池的配置;

///

///创建网站

///

///

public void CreateNewWebSite(NewWebSiteInfo siteInfo)

{

if (!EnsureNewSiteEnavaible(siteInfo.BindString))

{

throw new Exception("该网站已存在" + Environment.NewLine + siteInfo.BindString);

}

DirectoryEntry rootEntry = GetDirectoryEntry(entPath);

newSiteNum = GetNewWebSiteID();

DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer");

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

newSiteEntry.Properties["ServerBindings"].Value =

siteInfo.BindString;

newSiteEntry.Properties["ServerComment"].Value =

https://www.wendangku.net/doc/0f12645702.html,mentOfWebSite;

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

string ChangWebPath =

siteInfo.WebPath.Trim().Remove(siteInfo.WebPath.Trim().LastIndexOf('\\'),1); vdEntry.Properties["Path"].Value = ChangWebPath;

vdEntry.Invoke("AppCreate", true);//创建应用程序

vdEntry.Properties["AccessRead"][0] = true; //设置读取权限

vdEntry.Properties["AccessWrite"][0] = true;

vdEntry.Properties["AccessScript"][0] = true;//执行权限

vdEntry.Properties["AccessExecute"][0] = false;

vdEntry.Properties["DefaultDoc"][0] = "Login.aspx";//设置默认文档

vdEntry.Properties["AppFriendlyName"][0] = "LabManager"; //应用程序名称

vdEntry.Properties["AuthFlags"][0] = 1;//0表示不允许匿名访问,1表示就可以3为基本身份验证,7为windows继承身份验证

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

//操作增加MIME

//IISOle.MimeMapClass NewMime = new IISOle.MimeMapClass();

//NewMime.Extension = ".xaml"; NewMime.MimeType =

"application/xaml+xml";

//IISOle.MimeMapClass TwoMime = new IISOle.MimeMapClass();

//TwoMime.Extension = ".xap"; TwoMime.MimeType =

"application/x-silverlight-app";

//rootEntry.Properties["MimeMap"].Add(NewMime);

//rootEntry.Properties["MimeMap"].Add(TwoMime);

//https://www.wendangku.net/doc/0f12645702.html,mitChanges();

#region针对IIS7 DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");

int Version

=int.Parse(getEntity.Properties["MajorIISVersionNumber"].Value.ToString());

if (Version > 6)

{

#region创建应用程序池

string AppPoolName = "LabManager";

if (!IsAppPoolName(AppPoolName))

{

DirectoryEntry appPools = new

DirectoryEntry("IIS://localhost/W3SVC/AppPools");

newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool");

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

}

#endregion

#region修改应用程序的配置(包含托管模式及其NET运行版本) ServerManager sm = new ServerManager();

sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0"; sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated为集成 Classic为经典

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

#endregion

vdEntry.Properties["AppPoolId"].Value = AppPoolName;

https://www.wendangku.net/doc/0f12645702.html,mitChanges();

}

#endregion

//启动aspnet_regiis.exe程序

string fileName = Environment.GetEnvironmentVariable("windir") + @"\https://www.wendangku.net/doc/0f12645702.html,\Framework\v4.0.30319\aspnet_regiis.exe";

ProcessStartInfo startInfo = new ProcessStartInfo(fileName);

//处理目录路径

string path = vdEntry.Path.ToUpper();

int index = path.IndexOf("W3SVC");

path = path.Remove(0, index);

//启动ASPnet_iis.exe程序,刷新脚本映射

startInfo.Arguments = "-s " + path;

startInfo.WindowStyle = ProcessWindowStyle.Hidden;

https://www.wendangku.net/doc/0f12645702.html,eShellExecute = false;

startInfo.CreateNoWindow = true;

startInfo.RedirectStandardOutput = true;

startInfo.RedirectStandardError = true;

Process process = new Process();

process.StartInfo = startInfo;

process.Start();

process.WaitForExit();

string errors = process.StandardError.ReadToEnd();

if (errors != string.Empty)

{

}

}

string entPath = String.Format("IIS://{0}/w3svc", "localhost");

public DirectoryEntry GetDirectoryEntry(string entPath)

{

DirectoryEntry ent = new DirectoryEntry(entPath);

return ent;

}

public class NewWebSiteInfo

{

private string hostIP; //主机IP

private string portNum; //网站端口号

private string descOfWebSite; //网站表示。一般为网站的网站名。例如"https://www.wendangku.net/doc/0f12645702.html,"

private string commentOfWebSite;//网站注释。一般也为网站的网站名。

private string webPath; //网站的主目录。例如"e:\ mp"

public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)

{

this.hostIP = hostIP;

this.portNum = portNum;

this.descOfWebSite = descOfWebSite;

https://www.wendangku.net/doc/0f12645702.html,mentOfWebSite = commentOfWebSite;

this.webPath = webPath;

}

public string BindString

{

get {

return String.Format("{0}:{1}:{2}", hostIP, portNum, descOfWebSite); //网站标识(IP,端口,主机头值)

}

}

public string PortNum

{

get {

return portNum;

}

}

public string CommentOfWebSite

{

get {

return commentOfWebSite;

}

}

public string WebPath

{

get {

return webPath;

}

}

}

8:下面的代码是对文件夹权限进行设置,下面代码是创建Everyone 并给予全部权限

///

///设置文件夹权限处理给EVERONE赋予所有权限

///

///文件夹路径

public void SetFileRole()

{

string FileAdd = this.Context.Parameters["installdir"].ToString(); FileAdd = FileAdd.Remove(https://www.wendangku.net/doc/0f12645702.html,stIndexOf('\\'), 1);

DirectorySecurity fSec = new DirectorySecurity();

fSec.AddAccessRule(new

FileSystemAccessRule("Everyone",FileSystemRights.FullControl,InheritanceFlag s.ContainerInherit|InheritanceFlags.ObjectInherit,PropagationFlags.None,Acce ssControlType.Allow));

System.IO.Directory.SetAccessControl(FileAdd, fSec);

}

原文:https://www.wendangku.net/doc/0f12645702.html,/wujy/archive/2013/02/28/2937667.html

相关文档