C# 启动/停止 iis 网站 例子源码(iis 6.0下测试通过)
来源:互联网 发布:大智慧行情分析软件 编辑:程序博客网 时间:2024/06/03 22:20
#region IIS启动/停止 private enum eStates { Start = 2, Stop = 4, Pause = 6, } private string lastWebsite; private string websiteHash { get { return string.Format("{0}:{1}:{2}", txtServer.Text, txtUserID.Text, txtPassword.Text); } } private void initWebsiteList() { if (websiteHash == lastWebsite) return; lastWebsite = websiteHash; Cursor saveCursor = Cursor; Cursor = Cursors.WaitCursor; cmbWebsites.Items.Clear(); cmbWebsites.Items.AddRange(enumerateSites()); if (cmbWebsites.Items.Count > 0) cmbWebsites.SelectedIndex = 0; Cursor = saveCursor; } /// <summary> /// 定义开始”或“停止”,当前选择的网站上设置状态 /// </summary> /// <param name="state"></param> private void siteInvoke(eStates state) { string site = getSiteIdByName(cmbWebsites.SelectedItem.ToString()); if (site == null) { // on the odd chance that someone removed the website since we // enumerated the list MessageBox.Show("Website '" + cmbWebsites.SelectedItem + "' not found", "Can't " + state + " website"); showStatus(site); return; } lblSite.Text = site; try { ConnectionOptions connectionOptions = new ConnectionOptions(); if (txtUserID.Text.Length > 0) { connectionOptions.Username = txtUserID.Text; connectionOptions.Password = txtPassword.Text; } else { connectionOptions.Impersonation = ImpersonationLevel.Impersonate; } ManagementScope managementScope = new ManagementScope(@"\\" + txtServer.Text + @"\root\microsoftiisv2", connectionOptions); managementScope.Connect(); if (managementScope.IsConnected == false) { MessageBox.Show("Could not connect to WMI namespace " + managementScope.Path, "Connect Failed"); } else { SelectQuery selectQuery = new SelectQuery("Select * From IIsWebServer Where Name = 'W3SVC/" + site + "'"); using (ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(managementScope, selectQuery)) { foreach (ManagementObject objMgmt in managementObjectSearcher.Get()) objMgmt.InvokeMethod(state.ToString(), new object[0]); } } } catch (Exception ex) { if (ex.ToString().Contains("Invalid namespace")) { MessageBox.Show("Invalid Namespace Exception" + Environment.NewLine + Environment.NewLine + "This program only works with IIS 6 and later", "Can't " + state + " website"); } else { MessageBox.Show(ex.Message, "Can't " + state + " website"); } } showStatus(site); } /// <summary> /// 通过siteId找到指定的网站名称 /// </summary> /// <param name="siteName"></param> /// <returns></returns> private string getSiteIdByName(string siteName) { DirectoryEntry root = getDirectoryEntry("IIS://" + txtServer.Text + "/W3SVC"); foreach (DirectoryEntry e in root.Children) { if (e.SchemaClassName == "IIsWebServer") { if (e.Properties["ServerComment"].Value.ToString().Equals(siteName, StringComparison.OrdinalIgnoreCase)) { return e.Name; } } } return null; } /// <summary> /// 返回一个字符串数组中可用的网站名称 /// </summary> /// <returns></returns> private string[] enumerateSites() { List<string> siteNames = new List<string>(); try { DirectoryEntry root = getDirectoryEntry("IIS://" + txtServer.Text + "/W3SVC"); foreach (DirectoryEntry e in root.Children) { if (e.SchemaClassName == "IIsWebServer") { siteNames.Add(e.Properties["ServerComment"].Value.ToString()); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Can't enumerate websites"); lastWebsite = null; txtServer.Focus(); txtServer.SelectAll(); } return siteNames.ToArray(); } /// <summary> /// 按名称查找一个网站的显示和更新站点ID和地位 /// </summary> /// <param name="siteName"></param> private void findWebsite(string siteName) { string site = getSiteIdByName(siteName); if (site == null) { MessageBox.Show("Website '" + siteName + "' not found", "Error"); showStatus(site); return; } lblSite.Text = site; showStatus(site); } /// <summary> /// 显示指定站点的运行/停止状态ID /// </summary> /// <param name="siteId"></param> private void showStatus(string siteId) { string result = "unknown"; DirectoryEntry root = getDirectoryEntry("IIS://" + txtServer.Text + "/W3SVC/" + siteId); PropertyValueCollection pvc; pvc = root.Properties["ServerState"]; if (pvc.Value != null) result = (pvc.Value.Equals((int)eStates.Start) ? "Running" : pvc.Value.Equals((int)eStates.Stop) ? "Stopped" : pvc.Value.Equals((int)eStates.Pause) ? "Paused" : pvc.Value.ToString()); lblStatus.Text = result + " (" + pvc.Value + ")"; } /// <summary> /// 返回一个DirectoryEntry对象路径使用可选的用户id和密码 /// </summary> /// <param name="path"></param> /// <returns></returns> private DirectoryEntry getDirectoryEntry(string path) { if (txtUserID.Text.Length > 0) return new DirectoryEntry(path, txtUserID.Text, txtPassword.Text); else return new DirectoryEntry(path); } /// <summary> /// 设置ID和选择网站的地位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmbWebsites_SelectedIndexChanged_1(object sender, EventArgs e) { findWebsite(cmbWebsites.SelectedItem.ToString()); } private void cmbWebsites_Enter_1(object sender, EventArgs e) { initWebsiteList(); } /// <summary> /// 启动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStart_Click(object sender, EventArgs e) { siteInvoke(eStates.Start); } /// <summary> /// 停止 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStop_Click(object sender, EventArgs e) { siteInvoke(eStates.Stop); } /// <summary> /// 退出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnExit_Click(object sender, EventArgs e) { Close(); } #endregion
0 0
- C# 启动/停止 iis 网站 例子源码(iis 6.0下测试通过)
- IIS默认网站停止
- IIS默认网站停止
- C#IIS网站应用程序池启动回收停止
- iis无法启动 Internet信息服务默认网站总是停止
- C#IIS网站应用程序池启动回收停止
- C#实现IIS的启动、停止、重启
- C#实现IIS的启动、停止、重启
- IIS Server 自动启动停止
- 通过IIS发布网站
- IIS下MySQL停止和启动的方法
- C# 通过WebService方式 IIS发布网站 上传文件到服务器的虚拟机下 详尽方法
- C# 通过WebService方式 IIS发布网站 上传文件到服务器的虚拟机下 详尽方法
- IIS默认网站停止,出现错误ox8ffe2740
- IIS的启动与停止命令
- paip.脚本操作IIS启动停止站点
- IIS的启动与停止命令
- IIS 6.0下架设wap网站。
- 语料库资源————(一)
- [转]在PHP中用协同程序实现合作多任务
- GridPanel编辑时为某列赋值
- CURL状态码列表
- android UiAutomator如何向所有微信好友发送一条“你好,***”开头的祝福消息
- C# 启动/停止 iis 网站 例子源码(iis 6.0下测试通过)
- Navicat for MySQL导出表的字段和结构
- SMARTCLIENT入门教程之一
- CSRF 攻击的应对之道
- Timer 的 schedule()方法
- Verilog 阻塞与非阻塞
- 白帽子讲web安全之6
- Web安全之CSRF
- Spring+Hibernate+MySQL的主从分离/读写分离问题(1)