如何在asp.net中使用WMI功能,创建web站点等
3716 点击·0 回帖
![]() | ![]() | |
![]() | 最近做安装包是,需要在 .net 程序中调用 WMI 功能,创建 web 站点,虚拟目录和添加 host 头部信息,以前曾经用脚步做过类似的功能,用.net代码来做,倒是第一次。 查找了相关资料后,主要需要调用到 System.Management 命名空间下面的一些类来实现: 创建 Web 站点,该函数返回站点的 ID (这个 ID 是什么意思可以参考下面的文章获取:http://blog.crowe.co.nz/archive/2005/12/08/346.aspx ) CreateWebsite public static string CreateWebsite(string serverName, string appPoolName, string ip, string pathToRoot, string hostName, string domainName, int port) { ConnectionOptions options = new ConnectionOptions(); options.Authentication = AuthenticationLevel.Connect; options.EnablePrivileges = true; options.Impersonation = ImpersonationLevel.Impersonate; ManagementScope scope = new ManagementScope(string.Format(@"file://{0}/root/MicrosoftIISv2, serverName"), options); scope.Connect(); ManagementObject oW3SVC = new ManagementObject(scope, new ManagementPath(@"IIsWebService='W3SVC'"), null); ManagementBaseObject[] serverBindings = new ManagementBaseObject[1]; serverBindings[0] = CreateServerBinding(scope, string.Format("{0}.{1}", hostName, domainName), ip, port); ManagementBaseObject inputParameters = oW3SVC.GetMethodParameters("CreateNewSite"); inputParameters["ServerComment"] = string.Format("{0}.{1}", hostName, domainName); inputParameters["ServerBindings"] = serverBindings; inputParameters["PathOfRootVirtualDir"] = pathToRoot; ManagementBaseObject outParameter = oW3SVC.InvokeMethod("CreateNewSite", inputParameters, null); string siteId = Convert.ToString(outParameter.Properties["ReturnValue"].Value).Replace("IIsWebServer='W3SVC/", "").Replace("'", ""); ManagementObject oWebVirtDir = new ManagementObject(scope, new ManagementPath(string.Format(@"IIsWebVirtualDirSetting.Name='W3SVC/{0}/root'", siteId)), null); oWebVirtDir.Properties["AppFriendlyName"].Value = string.Format("{0}.{1}", hostName, domainName); oWebVirtDir.Properties["AccessRead"].Value = true; oWebVirtDir.Properties["AuthFlags"].Value = 5; // Windows 集成验证 oWebVirtDir.Properties["AccessScript"].Value = true; oWebVirtDir.Properties["Authanonymous"].Value = true; oWebVirtDir.Properties["AppPoolId"].Value = appPoolName; oWebVirtDir.Put(); ManagementObject site = new ManagementObject(scope, new ManagementPath(Convert.ToString(outParameter.Properties["ReturnValue"].Value)), null); site.InvokeMethod("Start", null); return siteId; } 创建虚拟目录 AddVirtualFolder public static void AddVirtualFolder(string serverName, string websiteId, string name, string path) { ManagementScope scope = new ManagementScope(string.Format(@"file://{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; // Windows 集成验证 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(); } 添加 host 头 public static void AddHostHeader(stri ng serverName, string hostHeader, string ip, int port, string websiteID) { ManagementScope scope = new ManagementScope(string.Format(@"file://{0}/root/MicrosoftIISV2", serverName)); scope.Connect(); string siteName = string.Format("'W3SVC/{0}'", websiteID); ManagementObject mo = new ManagementObject(scope,new System.Management.ManagementPath("IIsWebServerSetting=" + siteName), null); ManagementBaseObject[] websiteBindings =(ManagementBaseObject[])mo.Properties["ServerBindings"].Value; ManagementObject mco = CreateServerBinding(scope, hostHeader, ip, port); ManagementBaseObject[] newWebsiteBindings =new ManagementBaseObject[websiteBindings.Length + 1]; websiteBindings.CopyTo(newWebsiteBindings, 0); newWebsiteBindings[newWebsiteBindings.Length - 1] = mco; mo.Properties["ServerBindings"].Value = newWebsiteBindings; mo.Put(); } private static ManagementObject CreateServerBinding(ManagementScope scope, string hostName, string ip, int port) { ManagementClass mc = new ManagementClass(scope, new ManagementPath("ServerBinding"), null); ManagementObject mco = mc.CreateInstance(); mco.Properties["Hostname"].Value = hostName; mco.Properties["IP"].Value = ip; mco.Properties["Port"].Value = port; mco.Put(); return mco; } | |
![]() | ![]() |