Using WMI to create an IIS application directory using C #

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

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

However, I get the path of not found errors in known directories. If anyone has some recommendations that I can use, I would really appreciate it. Any other suggestions on how to do this are also welcome.

+4
source share
1 answer

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

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

Website Management with IIS 7.0 WMI Provider (IIS.NET)

+3
source

Source: https://habr.com/ru/post/1299135/


All Articles