创建类似SQL Server2000服务管理器的Windows Service控制器

 一.引子

对某一个服务采用类似SQL Server2000的服务管理器的方式来进行管理,包括带参数启动,暂停,停止,设置自动运行等操作。这里的重点不是建立服务,而是控制与操作服务,所以对服务的建立与注册不做叙述。

二.运行时效果

 

 

 

 

 

三.主要实现代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.ServiceProcess;
  10. using System.Threading;
  11. namespace ReportServiceManager
  12. {
  13.     public partial class FrmServer : Form
  14.     {
  15.         private bool _isClose = false;
  16.         public FrmServer()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.         
  21.         private void FrmServer_Load(object sender, EventArgs e)
  22.         {
  23.             ReadConfigXML();
  24.             InitServiceStatus();
  25.             this.txtServer.Text = PublicUse.ReportServer;
  26.             this.txtService.Text = PublicUse.ReportServiceName;
  27.             this.FormClosing += new FormClosingEventHandler(FrmServer_FormClosing);
  28.             //this.Resize += new EventHandler(FrmServer_Resize);
  29.         }
  30.         void FrmServer_Resize(object sender, EventArgs e)
  31.         {
  32.             if (this.WindowState == FormWindowState.Minimized)
  33.             {
  34.                 this.Hide();
  35.             }
  36.         }
  37.         void FrmServer_FormClosing(object sender, FormClosingEventArgs e)
  38.         {
  39.             if (!_isClose)
  40.             {
  41.                 string value = "3";
  42.                 if (this.cbxIsautorun.Checked)
  43.                 {
  44.                     value = "2";
  45.                 }
  46.                 setReg_Services(PublicUse.ReportServiceName, "Start", value);
  47.                 e.Cancel = true;
  48.                 this.WindowState = FormWindowState.Minimized;
  49.             }
  50.             else
  51.             {
  52.                 this.notifyIcon1.Visible = false;
  53.                 this.notifyIcon1.Dispose();
  54.             }
  55.         }
  56.         //读取配置文件
  57.         private void ReadConfigXML()
  58.         {
  59.             PublicUse.SetSecret(Application.StartupPath + @"/AppSet.XML");
  60.         }
  61.         private void InitServiceStatus()
  62.         {
  63.             string server = PublicUse.ReportServer;
  64.             string service = PublicUse.ReportServiceName;
  65.             try
  66.             {
  67.                 if ( server!= "" &&  service!= "")
  68.                 {
  69.                     ServiceController serviceCol = new ServiceController(service, server);
  70.                     if (serviceCol.Status == ServiceControllerStatus.Running)
  71.                     {
  72.                         btnStart.Enabled = false;
  73.                         btnStop.Enabled = true;
  74.                         btnPause.Enabled = true;
  75.                         this.tsbStatus.Text = "正在运行--//" + server + "-" + service;
  76.                     }
  77.                     if (serviceCol.Status == ServiceControllerStatus.Stopped)
  78.                     {
  79.                         btnStart.Enabled = true;
  80.                         btnStop.Enabled = false;
  81.                         btnPause.Enabled = false;
  82.                         this.tsbStatus.Text = "已经停止--//" + server + "-" + service;
  83.                     }
  84.                     if (serviceCol.Status == ServiceControllerStatus.Paused)
  85.                     {
  86.                         btnStart.Enabled = true;
  87.                         btnStop.Enabled = true;
  88.                         btnPause.Enabled = false;
  89.                         this.tsbStatus.Text = "已经暂停--//" + server + "-" + service;
  90.                     }
  91.                 }
  92.                 else
  93.                 {
  94.                     MessageBox.Show("请检查配置文件的服务器设置!""错误");
  95.                 }
  96.             }
  97.             catch (Exception ex)
  98.             {
  99.                 MessageBox.Show(ex.ToString());
  100.             }
  101.         }
  102.         private void btnStart_Click(object sender, EventArgs e)
  103.         {
  104.             string server = this.txtServer.Text.Trim();
  105.             string service = this.txtService.Text.Trim();
  106.             try
  107.             {
  108.                 if (server != "" && service != "")
  109.                 {
  110.                     ServiceController serviceCol = new ServiceController(service, server);
  111.                     
  112.                     if (serviceCol.Status == ServiceControllerStatus.Stopped)
  113.                     {
  114.                         this.tsbStatus.Text = "正在启动--//" + server + "-" + service;
  115.                         //获取参数
  116.                         string datestr = PublicUse.GetXmlValue(Application.StartupPath + @"/AppSet.XML""begindate");
  117.                         string cyclen = PublicUse.GetXmlValue(Application.StartupPath + @"/AppSet.XML""cyclength");
  118.                         string cyctime = PublicUse.GetXmlValue(Application.StartupPath + @"/AppSet.XML""cycletime");
  119.                         string[] args = new string[]{datestr,cyctime,cyclen};
  120.                         serviceCol.Start(args);
  121.                         while (serviceCol.Status == ServiceControllerStatus.Stopped)
  122.                         {
  123.                             Thread.Sleep(1000);
  124.                             serviceCol.Refresh();
  125.                         }
  126.                         this.tsbStatus.Text = "正在运行--//" + server + "-" + service;
  127.                         this.btnStart.Enabled = false;
  128.                         this.btnPause.Enabled = true;
  129.                         this.btnStop.Enabled = true;
  130.                     }
  131.                     if (serviceCol.Status == ServiceControllerStatus.Paused)
  132.                     {
  133.                         this.tsbStatus.Text = "正在继续--//" + server + "-" + service;
  134.                         if (this.cbxIsautorun.Checked)
  135.                         {
  136.                         }
  137.                         serviceCol.Continue();
  138.                         while (serviceCol.Status == ServiceControllerStatus.Paused)
  139.                         {
  140.                             Thread.Sleep(1000);
  141.                             serviceCol.Refresh();
  142.                         }
  143.                         this.tsbStatus.Text = "正在运行--//" + server + "-" + service;
  144.                         this.btnStart.Enabled = false;
  145.                         this.btnPause.Enabled = true;
  146.                         this.btnStop.Enabled = true;
  147.                     }
  148.                 }
  149.                 else
  150.                 {
  151.                     MessageBox.Show("请检查配置文件的服务器设置!""错误");
  152.                 }
  153.             }
  154.             catch (Exception ex)
  155.             {
  156.                 MessageBox.Show(ex.ToString());
  157.             }
  158.             
  159.         }
  160.         private void btnPause_Click(object sender, EventArgs e)
  161.         {
  162.             string server = this.txtServer.Text.Trim();
  163.             string service = this.txtService.Text.Trim();
  164.             if (server != "" && service != "")
  165.             {
  166.                 ServiceController serviceCol = new ServiceController(service, server);
  167.                 serviceCol.Pause();
  168.                 this.tsbStatus.Text = "正在暂停--//" + server + "-" + service;
  169.                 while (serviceCol.Status != ServiceControllerStatus.Paused)
  170.                 {
  171.                     Thread.Sleep(1000);
  172.                     serviceCol.Refresh();
  173.                 }
  174.                 this.tsbStatus.Text = "已经暂停--//" + server + "-" + service;
  175.                 this.btnPause.Enabled = false;
  176.                 this.btnStart.Enabled = true;
  177.                 this.btnStop.Enabled = true;
  178.             }
  179.             else
  180.             {
  181.                 MessageBox.Show("请检查配置文件的服务器设置!""错误");
  182.             }
  183.         }
  184.         private void btnStop_Click(object sender, EventArgs e)
  185.         {
  186.             string server = this.txtServer.Text.Trim();
  187.             string service = this.txtService.Text.Trim();
  188.             if (server != "" && service != "")
  189.             {
  190.                 ServiceController serviceCol = new ServiceController(service, server);
  191.                 serviceCol.Stop();
  192.                 this.tsbStatus.Text = "正在停止--//" + server + "-" + service;
  193.                 while (serviceCol.Status != ServiceControllerStatus.Stopped)
  194.                 {
  195.                     Thread.Sleep(1000);
  196.                     serviceCol.Refresh();
  197.                 }
  198.                 this.tsbStatus.Text = "已经停止--//" + server + "-" + service;
  199.                 this.btnStop.Enabled = false;
  200.                 this.btnStart.Enabled = true;
  201.                 this.btnPause.Enabled = false;
  202.             }
  203.             else
  204.             {
  205.                 MessageBox.Show("请检查配置文件的服务器设置!""错误");
  206.             }
  207.         }
  208.         private void btnRefresh_Click(object sender, EventArgs e)
  209.         {
  210.             string server = this.txtServer.Text.Trim();
  211.             string service = this.txtService.Text.Trim();
  212.             if (server != "" && service != "")
  213.             {
  214.                 ServiceController serviceCol = new ServiceController(service, server);
  215.                 serviceCol.Refresh();
  216.                 Thread.Sleep(1000);
  217.             }
  218.             else
  219.             {
  220.                 MessageBox.Show("请检查配置文件的服务器设置!""错误");
  221.             }
  222.         }
  223.         private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
  224.         {
  225.             if (this.WindowState == FormWindowState.Minimized)
  226.             {
  227.                 this.WindowState = FormWindowState.Normal;
  228.             }
  229.             this.Activate();
  230.         }
  231.        
  232.         #region----------注册表操作----------
  233.         //获得服务注册表键值
  234.         public static string getReg_Services(string serverName)
  235.         {
  236.             string rootKey = "HKEY_LOCAL_MACHINE";
  237.             string subKey = "SYSTEM//CurrentControlSet//Services//" + serverName;//你的服务名;
  238.             string keyname = rootKey + "//" + subKey;
  239.             return getReg(keyname, "Start");
  240.         }
  241.         //写入服务注册表键值
  242.         private static void setReg_Services(string serverName,string keyValue, string newvalue)
  243.         {
  244.             string rootKey = "HKEY_LOCAL_MACHINE";
  245.             string subKey = "SYSTEM//CurrentControlSet//Services//" + serverName;//你的服务名;
  246.             string keyname = rootKey + "//" + subKey;
  247.             setReg(keyname, keyValue, newvalue);//先得查看其值
  248.         }
  249.         private static string getReg(string keyname, string valuename)
  250.         {
  251.             //string valuename = "";
  252.             object defaultvalue = "";
  253.             return Microsoft.Win32.Registry.GetValue(keyname, valuename, defaultvalue).ToString();
  254.         }
  255.         private static void setReg(string keyName, string valuename, string keyvalue)
  256.         {
  257.             Microsoft.Win32.Registry.SetValue(keyName, valuename, keyvalue, Microsoft.Win32.RegistryValueKind.DWord);
  258.         }
  259.         #endregion--------------------------
  260.         #region  ---------菜单操作----------
  261.         
  262.         private void tmiExit_Click(object sender, EventArgs e)
  263.         {
  264.             _isClose = true;
  265.             this.Close();
  266.         }
  267.         private void tmiOpen_Click(object sender, EventArgs e)
  268.         {
  269.             if (this.WindowState == FormWindowState.Minimized)
  270.                 this.WindowState = FormWindowState.Normal;
  271.             this.Activate();
  272.         }
  273.         private void tmiSet_Click(object sender, EventArgs e)
  274.         {
  275.             FrmSet frm = new FrmSet();
  276.             frm.ShowDialog();
  277.             if (frm.IsButtonOK)
  278.             {
  279.                 //停止服务
  280.                 this.btnStop.PerformClick();
  281.                 //重新加载
  282.                 ReadConfigXML();
  283.                 InitServiceStatus();
  284.                 this.txtServer.Text = PublicUse.ReportServer;
  285.                 this.txtService.Text = PublicUse.ReportServiceName;
  286.             }
  287.         }
  288.         private void tmiStart_Click(object sender, EventArgs e)
  289.         {
  290.             this.btnStart.PerformClick();
  291.         }
  292.         private void tmiPause_Click(object sender, EventArgs e)
  293.         {
  294.             this.btnPause.PerformClick();
  295.         }
  296.         private void tmiStop_Click(object sender, EventArgs e)
  297.         {
  298.             btnStop.PerformClick();
  299.         }
  300.         private FrmAbout _frmAbout;
  301.         private void tmiAbout_Click(object sender, EventArgs e)
  302.         {
  303.             if (_frmAbout == null || _frmAbout.IsDisposed)
  304.             {
  305.                 _frmAbout = new FrmAbout();
  306.             }
  307.             _frmAbout.Show();
  308.             _frmAbout.Activate();
  309.         }
  310.         #endregion--------------------------
  311.        
  312.     }
  313. }

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值