主要是想用一下VS2005,对IIS的操作在IIS Admin中本来就可以进行管理。所以将就看,无所谓有用无用哈。^_^
在网上也找了一下,参考了一些别人的写法,如果有什么不对的,请你多指点。
本文只写出了部分代码,其他的内容请你自己补足。
环境:Windows2003 + VS2005
先需要添加两个引用: System.DirectoryServices和System.Management
添加虚拟目录:
做了一个简单的页面,如下图:
这里只是为了说明很多IIS里面站点的属性可以设置(具体属性及说明见本文最后),在本例子的aspx.cs文件里面,并不一定使用了页面控件的值;还有就是在程序中只是为了实现,并未对程序的写法进行严格的要求。
处理添加按钮的点击事件:
public static string VirDirSchemaName = "IIsWebVirtualDir";
IISManager iis = new IISManager();
iis.Connect();
iis.DefaultPage = DefaultPage.Text.Trim();
ReturnMessage.Text = iis.CreateVirtualDirectory(VirtualPath.Text.Trim(), PhysicalPath.Text.Trim());
在本文中,操作IIS的方法全部写在自定义的类IISManger中。上面的CreateVirtualDirectory()如下:
#region CreateVirtualDirectory 添加虚拟目录
public string CreateVirtualDirectory(string nameDirectory, string realPath)
{
DirectoryEntry folderRoot = _iisServer.Children.Find("Root", VirDirSchemaName);
try
{
DirectoryEntry newVirDir = folderRoot.Children.Add(nameDirectory, VirDirSchemaName);
newVirDir.Properties["Path"].Insert(0, realPath); // 虚拟目录的绝对路径
newVirDir.Properties["AccessExecute"][0] = false; // 可执行文件。执行权限下拉菜单中
newVirDir.Properties["AccessRead"][0] = true; // 读取
newVirDir.Properties["AccessWrite"][0] = true; // 写入
newVirDir.Properties["ContentIndexed"][0] = true; // 资源索引
newVirDir.Properties["DefaultDoc"][0] = DefaultPage; // 默认页面
newVirDir.Properties["AppFriendlyName"][0] = "world"; // 友好的显示名称
newVirDir.Properties["AppIsolated"][0] = 2; // 值 0 表示应用程序在进程内运行,值 1 表示进程外,值 2 表示进程池
newVirDir.Properties["AccessScript"][0] = true; // 可执行脚本。执行权限下拉菜单中
newVirDir.Properties["DontLog"][0] = true;
newVirDir.Invoke("AppCreate", true);
newVirDir.CommitChanges();
folderRoot.CommitChanges();
_iisServer.CommitChanges();
return "Add success";
}
catch (Exception e)
{
return "Sorry!Error when adding the virtual path. Return message is : " + e.Message;
}
}
#endregion
处理添加按钮的点击事件:
public static string VirDirSchemaName = "IIsWebVirtualDir";
IISManager iis = new IISManager();
iis.Connect();
iis.DefaultPage = DefaultPage.Text.Trim();
ReturnMessage.Text = iis.CreateVirtualDirectory(VirtualPath.Text.Trim(), PhysicalPath.Text.Trim());
在本文中,操作IIS的方法全部写在自定义的类IISManger中。上面的CreateVirtualDirectory()如下:
#region CreateVirtualDirectory 添加虚拟目录
public string CreateVirtualDirectory(string nameDirectory, string realPath)
{
DirectoryEntry folderRoot = _iisServer.Children.Find("Root", VirDirSchemaName);
try
{
DirectoryEntry newVirDir = folderRoot.Children.Add(nameDirectory, VirDirSchemaName);
newVirDir.Properties["Path"].Insert(0, realPath); // 虚拟目录的绝对路径
newVirDir.Properties["AccessExecute"][0] = false; // 可执行文件。执行权限下拉菜单中
newVirDir.Properties["AccessRead"][0] = true; // 读取
newVirDir.Properties["AccessWrite"][0] = true; // 写入
newVirDir.Properties["ContentIndexed"][0] = true; // 资源索引
newVirDir.Properties["DefaultDoc"][0] = DefaultPage; // 默认页面
newVirDir.Properties["AppFriendlyName"][0] = "world"; // 友好的显示名称
newVirDir.Properties["AppIsolated"][0] = 2; // 值 0 表示应用程序在进程内运行,值 1 表示进程外,值 2 表示进程池
newVirDir.Properties["AccessScript"][0] = true; // 可执行脚本。执行权限下拉菜单中
newVirDir.Properties["DontLog"][0] = true;
newVirDir.Invoke("AppCreate", true);
newVirDir.CommitChanges();
folderRoot.CommitChanges();
_iisServer.CommitChanges();
return "Add success";
}
catch (Exception e)
{
return "Sorry!Error when adding the virtual path. Return message is : " + e.Message;
}
}
#endregion
开始的时候,不管怎么样调试上面的代码,始终报错。在网上查了一下资料,才发现是权限不够。结果我是在组件管理器里面修改,然后又在文件夹修改,改来改去始终没找到关键改哪里,差点累死俺。最后才找到别人曾经做过的方法,在web.config文件里面 下添加一个 ,我把里面的信息改成了administrator,然后就成功了。也有人说修改machine.config也可以,不过我没试。对于这种修改config文件的做法,我觉得不是最好的,应该是修改其他某个地方的权限就可以,把密码暴露出来始终不是什么好事,在MSDN上也没找到,如果哪位大哥知道,透露一下好了~~~~~~~~~~~~
连接IIS服务器的方法如下,操作IIS(添加,修改,删除)的时候都需要用到:
#region Connect 连接IIS服务器
public bool Connect()
{
if (_serverName == null)
return false;
try
{
_iisServer = new DirectoryEntry("IIS://" + _serverName + "/W3SVC/1");
_target = _serverName;
_connection = new ConnectionOptions();
_scope = new ManagementScope(@"//" + _serverName + @"/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
关于添加IIS虚拟目录,还可以参考:System.EnterpriseServices.Internal.IISVirtualRoot.Create(),System.EnterpriseServices.Internal. Publish.CreateVirtualRoot(),System.EnterpriseServices.Internal .SoapServerVRoot.CreateVirtualRootEx
删除虚拟目录:
#region DeleteVirtualDirectory 删除虚拟目录
public string DeleteVirtualDirectory(string nameDirectory)
{
DirectoryEntry folderRoot = _iisServer.Children.Find("Root", VirDirSchemaName);
DirectoryEntry newVirDir;
try
{
newVirDir = folderRoot.Children.Find(nameDirectory, VirDirSchemaName);
}
catch
{
return "Sorry! The virtual path does not exists!!";
}
try
{