2010-01-22 84 views
4

我们有一个安装在Windows 2003和Windows 2008系统的Web应用程序。在过去,我们的安装使用ADSI创建一对情侣在IIS应用程序目录的代码,但是这需要安装在Windows 2008年我一直在尝试使用WMI来创建应用程序目录中的IIS 6管理组件,所以我们可以支持两个操作系统。使用WMI创建IIS应用程序目录与C#

我一直在尝试这种代码

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(); 
    } 
} 

不过,我得到路径上称为目录未发现的错误。如果任何人有一些我可以使用的参考资料,我将不胜感激。任何其他建议如何去做这件事也是受欢迎的。

回答

3

使用上面的代码,你仍然需要在Windows 2008/IIS7在IIS6兼容性位。这样做的原因是,调用设置属性,如DirBrowseFlagsAccessFlags等等是不是在IIS7没有IIS6管理组件支持IIS 6元数据库属性。

对于IIS7我建议直接对Microsoft.Web.Administration命名空间编程,但如果你真的需要使用WMI再看看这篇文章:

Managing Sites with IIS 7.0's WMI Provider (IIS.NET)

+0

我本来希望能够使用IIS6或IIS7的单一代码路径,所以我避免使用IIS7特定的Microsoft.Web.Administration类。但是,我想我只需要检测IIS版本并继续使用ADSI for IIS6,并在IIS7的另一个代码路径中使用新的东西。 谢谢, – 2010-01-26 13:17:06

+0

@Shane - 另一个很好的理由是,IIS6 compat的垫片还用'不能利用的功能,如预启动条件AboCustomMapper'对象bodges的'HandlerMappings'(类似于IIS6脚本映射)。相信我,这个努力是值得的,以保持良好的'applicationHost.config'文件卫生。 – Kev 2010-01-26 14:15:52

+0

谢谢,正是我之后 – 2010-05-05 12:46:22

相关问题