我们有一个安装在Windows 2003和Windows 2008系统上的Web应用程序。在过去,我们的安装代码使用ADSI在IIS中创建几个应用程序目录,但这需要在Windows 2008中安装IIS 6管理组件。我一直在尝试使用WMI创建应用程序目录,以便我们可以支持两种操作系统。
我一直在尝试这段代码
public static void AddVirtualFolder(string serverName, string websiteId, string name, string path)
{
ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISV2", serverName));
scope.Connect();
string siteName = string.Format("W3SVC/{0}/Root/{1}", websiteId, name);
ManagementClass mc = new ManagementClass(scope, new ManagementPath("IIsWebVirtualDirSetting"), null);
ManagementObject oWebVirtDir = mc.CreateInstance();
oWebVirtDir.Properties["Name"].Value = siteName;
oWebVirtDir.Properties["Path"].Value = path;
oWebVirtDir.Properties["AuthFlags"].Value = 5; // Integrated Windows Auth.
oWebVirtDir.Properties["EnableDefaultDoc"].Value = true;
// date, time, size, extension, longdate ;
oWebVirtDir.Properties["DirBrowseFlags"].Value = 0x4000003E;
oWebVirtDir.Properties["AccessFlags"].Value = 513; // read script
oWebVirtDir.Put();
ManagementObject mo = new ManagementObject(scope, new System.Management.ManagementPath("IIsWebVirtualDir='" + siteName + "'"), null);
ManagementBaseObject inputParameters = mo.GetMethodParameters("AppCreate2");
inputParameters["AppMode"] = 2;
mo.InvokeMethod("AppCreate2", inputParameters, null);
mo = new ManagementObject(scope, new System.Management.ManagementPath("IIsWebVirtualDirSetting='" + siteName + "'"), null);
mo.Properties["AppFriendlyName"].Value = name;
mo.Put();
}
}
但是,我在已知目录上找到路径未找到错误。如果有人有一些我可以使用的参考资料,我将不胜感激。关于如何解决这个问题的任何其他建议也是受欢迎的。
答案 0 :(得分:3)
使用上面的代码,您仍然需要Windows 2008 / IIS7上的IIS6兼容性位。这样做的原因是,设置DirBrowseFlags
,AccessFlags
等属性的调用是IIS7配置数据库属性,IIS7不支持IIS6管理组件。
对于IIS7,我建议直接针对Microsoft.Web.Administration
命名空间进行编程,但如果你真的需要使用WMI,那么请看这篇文章: