开发者

Use WMI to create IIS Application Directory with C#

We have a web application that is installed on Windows 2003 and Windows 2008 systems. In the past, our install code used ADSI to create a couple of application directories in IIS, but this requires the IIS 6 management components to be installed in Windows 2008. I have been trying to use WMI to create the application directories so we can support both operating systems.

I have been trying this code

   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("IIsWebVi开发者_JS百科rtualDir='" + 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();
    }
}

However, I get path not found errors on known directories. If anybody has some references I can use, I would greatly appreciate it. Any other suggestions on how to go about this are also welcome.


Using the code above, you will still need the IIS6 compatibility bits on Windows 2008/IIS7. The reason for this is that the calls to set properties such as DirBrowseFlags, AccessFlags and so on are IIS 6 metabase properties that are not supported in IIS7 without the IIS6 management components.

For IIS7 I'd recommend programming directly against the Microsoft.Web.Administration namespace, but if you really need to use WMI then see this article:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜