⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iismainwindow.cs

📁 用ADSI操作IIS文件
💻 CS
📖 第 1 页 / 共 3 页
字号:
            this.ResumeLayout(false);

        }
		#endregion

        /// <summary>
        /// Override the window load to display the available sites in IIs
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad (e);

            this.RefreshSites(false);
        }

        /// <summary>
        /// Refreshes the site list when focus is regained
        /// </summary>
        protected override void OnActivated(EventArgs e)
        {
            this.RefreshSites(true);

            base.OnActivated (e);
        }


        protected override void OnClosing(CancelEventArgs e)
        {
            _notifyIcon.Visible = false;

            base.OnClosing (e);
        }


        /// <summary>
        /// Unchecks all other items, enforcing the rule that only one item will ever be checked at a time
        /// </summary>
        /// <param name="checkedItem"></param>
        private void UncheckAllOtherItems(IIsWebSiteListViewItem checkedItem)
        {
            foreach (IIsWebSiteListViewItem item in _listView.Items)
            {
                if (item != checkedItem && item.Checked)
                {
                    item.Checked = false;                                            
                }                               
            }
        }

        private void RefreshSites(bool refreshSites)
        {
            this.RefreshSites(refreshSites, false, 0);
        }

        /// <summary>
        /// Refreshes the list of IIs web sites
        /// </summary>
        private void RefreshSites(bool refreshSites, bool selectSite, int siteIndex)
        {
            try
            {                
                _listView.BeginUpdate();                
                _listView.Items.Clear();
                this.ResetStatusBar();

                if (refreshSites)
                {
                    _iisAdministrator.RefreshWebSites();
                }
                
                IIsWebSiteListViewItem[] items = new IIsWebSiteListViewItem[_iisAdministrator.WebSites.Count];
                for (int i = 0; i < items.Length; i++)
                {
                    items[i] = new IIsWebSiteListViewItem(_iisAdministrator.WebSites[i]);                                       
                }

                _listView.Items.AddRange(items);                               

                this.DisplayStartedSiteInStatusBar(_iisAdministrator.WebSites.ActiveWebSite);
                this.DisplayWebSiteCount(_iisAdministrator.WebSites.Count);
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                _listView.EndUpdate();

                if (selectSite)
                {
                    foreach (IIsWebSiteListViewItem item in _listView.Items)
                    {
                        if (item.WebSite.Index == siteIndex)
                        {
                            _listView.Focus();
                            item.Selected = true;
                            break;
                        }
                    }
                }
            }
        }   

        /// <summary>
        /// Resets the status bar text
        /// </summary>
        private void ResetStatusBar()
        {
            _statusBar.Panels[0].Text = null;
            _statusBar.Panels[1].Text = null;
        }

        /// <summary>
        /// Displays the total number of created web sites
        /// </summary>
        /// <param name="count"></param>
        private void DisplayWebSiteCount(int count)
        {
            _statusBar.Panels[0].Text = string.Format("{0} web sites", count);
        }

        /// <summary>
        /// Displays the active (Started) web site in the status bar
        /// </summary>
        /// <param name="site"></param>
        private void DisplayStartedSiteInStatusBar(IIsWebSite site)
        {
            if (site != null)
            {
                _statusBar.Panels[1].Text = string.Format("Active Site: {0}", site.Name);
            }
            else
            {
                _statusBar.Panels[1].Text = "Active Site: None";
            }
        }

        /// <summary>
        /// Occurs when a web site is started
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WebSite_Started(object sender, IIsWebSiteEventArgs e)
        {
            this.RefreshSites(true, true, e.WebSite.Index);
        }

        /// <summary>
        /// Occurs when a web site is stopped
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WebSite_Stopped(object sender, IIsWebSiteEventArgs e)
        {
            this.RefreshSites(true);
        }  
  
        /// <summary>
        /// Occurs when the window is resized, handles displaying the program in the taskbar
        /// </summary>
        private void IIsMainWindow_Resize(object sender, EventArgs e)
        {
            if(this.WindowState == FormWindowState.Minimized)
            {
                this.ShowInTaskbar = false;
            }
        }

        /// <summary>
        /// Starts a site if it is stopped or vice versa it if it is started when
        /// double clicked
        /// </summary>
        private void ListView_DoubleClick(object sender, EventArgs e)
        {
            IIsWebSiteListViewItem item = this._listView.SelectedItems[0] as IIsWebSiteListViewItem;

            if(item != null)
            {
                this.ToggleSiteState(item.WebSite);
            }
        }

        /// <summary>
        /// Populates the context menu
        /// </summary>
        private void ContextMenuTray_Popup(object sender, EventArgs e)
        {
            // Semi-hack, could be selective and only remove the web site menu items,
            // but just going to clear them all every time for now
            try
            {
                _contextMenuTray.MenuItems.Clear();

                IIsWebSite activeSite = _iisAdministrator.WebSites.ActiveWebSite;

                for(int x=0;x<_iisAdministrator.WebSites.Count;x++)
                {
                    IIsWebSiteMenuItem item = new IIsWebSiteMenuItem(_iisAdministrator.WebSites[x], new EventHandler(ContextMenuTrayWebSite_Clicked));
                    _contextMenuTray.MenuItems.Add(item);

                    item.Checked = (activeSite != null && item.WebSite.Index == activeSite.Index);
                }

                _contextMenuTray.MenuItems.Add(new MenuItem("-"));
                _contextMenuTray.MenuItems.Add(new MenuItem("Restart IIS", new EventHandler(ContextMenuTrayRestartIIs_Clicked)));
                _contextMenuTray.MenuItems.Add(new MenuItem("Open IIS", new EventHandler(ContextMenuTrayOpenIIs_Clicked)));
                _contextMenuTray.MenuItems.Add(new MenuItem("Open IIsAdmin.NET", new EventHandler(ContextMenuTrayOpenIIsAdmin_Clicked)));
                                
            }
            catch(Exception ex)
            {
                Debug.Write(ex);
            }
        }

        /// <summary>
        /// Restarts IIS when clicked in taskbar context menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ContextMenuTrayRestartIIs_Clicked(object sender, EventArgs e)
        {
            this.BeginRestartIIs();
        }

        /// <summary>
        /// Opens IIS when clicked in taskbar context menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ContextMenuTrayOpenIIs_Clicked(object sender, EventArgs e)
        {
            IIsAdministrator.OpenIIsManagementConsole();
        }

        /// <summary>
        /// Restores IIsAdmin.NET when clicked in taskbar context menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ContextMenuTrayOpenIIsAdmin_Clicked(object sender, EventArgs e)
        {
            if(this.WindowState == FormWindowState.Minimized)
            {
                this.Restore();
            }
            else
            {
                this.Focus();
            }
        }

        /// <summary>
        /// Handles when a site is clicked in the context menu, will start a stopped site, or stop
        /// a started site
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ContextMenuTrayWebSite_Clicked(object sender, EventArgs e)
        {
            IIsWebSiteMenuItem item = (IIsWebSiteMenuItem)sender;
            this.ToggleSiteState(item.WebSite);
        }

        private void ToggleSiteState(IIsWebSite site)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -