如何在 asp.net 中使用 WMI 功能,创建web站点等_绿色软件之家

绿色软件之家:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|系统之家|纯净系统

您当前所在位置:首页网络编程.Net编程 → 如何在 asp.net 中使用 WMI 功能,创建web站点等

如何在 asp.net 中使用 WMI 功能,创建web站点等

时间:2015/6/28来源:绿色软件之家作者:网管联盟我要评论(0)

  最近做安装包是,需要在 .net 程序中调用 WMI 功能,创建 web 站点,虚拟目录和添加 host 头部信息,以前曾经用脚步做过类似的功能,用.net代码来做,倒是第一次。

  查找了相关资料后,主要需要调用到  System.Management 命名空间下面的一些类来实现:

  创建 Web 站点,该函数返回站点的 ID (这个 ID 是什么意思可以参考下面的文章获取:https://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(string 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;
        }

关键词标签:asp.net

相关阅读

文章评论
发表评论

热门文章 手把手教你用好LINQ to SQL手把手教你用好LINQ to SQL在.NET环境下为网站增加IP过滤功能在.NET环境下为网站增加IP过滤功能ASP.NET 如何避免页面重新整理时重复送出ASP.NET 如何避免页面重新整理时重复送出用Asp.net扩展ExtJS用Asp.net扩展ExtJS

相关下载

人气排行 asp.net表单提交方法GET\POST在ASP.NET中如何判断用户IE浏览器的版本Asp.net中messagebox的实现方法Asp.net中的web.config配置在ASP.NET MVC中实现大文件异步上传用Iformattable接口控制.Net中文本格式c#.Net经典面试题目用Asp.net扩展ExtJS