工作闲时:做一个小功能,就是用C#语法创建一个虚拟目录,从网上搜搜都是,但是呢如果机器的.net framework的版本很多,需要设置框架的版本改如何写呢?
public string CreateVirtualDirectory(string nameDirectory, string realPath, string defaultPage)
{
string _serverName = "localhost";
DirectoryEntry _iisServer = new DirectoryEntry("IIS://" + _serverName + "/W3SVC/1");
DirectoryEntry folderRoot = _iisServer.Children.Find("ROOT", VirDirSchemaName);
if (folderRoot == null)
return "IIS 未正常安装";
if (folderRoot.Children == null)
return "IIS 可能未启动";
DirectoryEntry existPath = null;
try
{
existPath = folderRoot.Children.Find(nameDirectory, VirDirSchemaName);
}
catch (Exception e)
{}
if (existPath != null)
{
StringBuilder sb;
sb = new StringBuilder();
System.DirectoryServices.PropertyCollection props = existPath.Properties;
foreach (System.DirectoryServices.PropertyValueCollection valcol in existPath.Properties)
{
sb.Append(valcol.PropertyName);
sb.Append ( ":" );
sb.Append ( valcol.Value.ToString());
sb.Append ("\r");
}
string f = sb.ToString();
}
DirectoryEntry newVirDir = null;
try
{
newVirDir = folderRoot.Children.Add(nameDirectory, folderRoot.SchemaClassName);
}
catch (Exception e)
{
return "Sorry!Error when adding the virtual path. Return message is : " + e.Message;
}
try
{
newVirDir.Properties["Path"].Insert(0, realPath); // 虚拟目录的绝对路径
newVirDir.Properties["AuthFlags"][0] = 5; //1:anonymouse, 4:windows
newVirDir.Properties["AccessExecute"][0] = false; // 可执行文件。执行权限下拉菜单中
newVirDir.Properties["AccessRead"][0] = true; // 读取
newVirDir.Properties["AccessWrite"][0] = false; // 写入
newVirDir.Properties["AccessScript"][0] = true; // 可执行脚本。执行权限下拉菜单中
newVirDir.Properties["ContentIndexed"][0] = true; // 资源索引
newVirDir.Properties["DefaultDoc"][0] = defaultPage; // DefaultPage; // 默认页面
newVirDir.Properties["AppFriendlyName"][0] = "友好的目录名称"; // 友好的显示名称
newVirDir.Properties["AppIsolated"][0] = 2; // 值0 表示应用程序在进程内运行,值1 表示进程外,值2 表示进程池
newVirDir.Properties["DontLog"][0] = true;
newVirDir.Properties["ScriptMaps"].Value = ScriptArray().ToArray();
newVirDir.Invoke("AppCreate", true); //q确保创建成功
newVirDir.CommitChanges();
folderRoot.CommitChanges();
_iisServer.CommitChanges();
return "Add success";
}
catch (Exception e)
{
return "Error message is : " + e.Message;
}
return "-----------";
}
{
ArrayList list = new ArrayList();
string[] array={".ascx",".asmx",".aspx",".config"};
for (int i = 0; i < array.Length; i++)
{
list.Add(array[i] + @",c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG");
}
return list;
}
将Asp.net框架的版本设为2.0,其实在虚拟目录属性添加一个属性即可,newVirDir.Properties["ScriptMaps"].Value = ScriptArray().ToArray();
newVirDir.Properties["ScriptMaps"].Value 是将获得一个object的数组。
做的时候,跟本不知道虚拟目录到底有哪些属性,可是项目经理提示一下,就犹醍醐灌顶,他说创建一个目录,然后读取。有时候解决问题原来可以这样。
希望给大家带来点收获。