Windows服务控制应用开发指南

在本文中,将学习如何通过Windows Forms应用程序控制安装在机器上的服务。这个应用程序将能够列出并显示所有可用的服务,控制特定服务,并显示详细的服务信息。

要完成这个项目,需要具备C#的中级知识,并且熟悉Windows Forms应用程序。

要求

  • Visual Studio
  • .NET Framework
  • Windows机器

使用代码

首先,需要创建一个新的Windows Forms应用程序,这是预安装的C#项目之一。将这个项目命名为"ControlServices"。在工具箱中,将两个按钮、两个列表框、两个文本框和四个标签拖放到表单设计器中,如下所示:

建议更改按钮的名称。从工具箱控制器中添加一个ServiceController项,然后将其命名为ServiceController1。在服务控制器属性中,选择Appinfo作为默认服务名称。

要显示listBox2上安装的所有服务,首先添加以下代码:

private void button2ListServices_Click(object sender, EventArgs e) { ServiceController[] AllServices; // 创建服务数组 AllServices = ServiceController.GetServices(); // 获取所有服务 foreach (ServiceController oneService in AllServices) { listBox2.Items.Add(oneService.ServiceName.ToString()); // 逐个插入服务名称到listbox } }

不要忘记添加using System.ServiceProcess;命名空间。

以下是它的一个示例运行:

可能会注意到,一些服务看起来没有意义,所以需要在用户点击listbox中的任何服务时显示完整的服务名称。为此,双击listbox2,并添加以下代码:

private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { serviceController1.ServiceName = listBox2.SelectedItem.ToString(); textBox2.Text = serviceController1.DisplayName.ToString(); }

例如:当用户点击ehSched服务时,应用程序会显示其完整名称Windows Media Center Scheduler Service。

将按照这个顺序控制安装的进程。如果选定的进程已停止,将尝试启动它;如果它正在运行,将尝试暂停它;如果它已暂停,将尝试停止它。当程序无法启动、停止或暂停进程时,它将显示一个异常,说明无法完成该任务。

建议使用using System.Threading;命名空间,但不是强制性的。

要实现上述应用程序功能,请双击listbox2并添加以下代码:

textBox1.BackColor = System.Drawing.Color.White; textBox1.Text = serviceController1.Status.ToString();

然后返回表单设计器,双击Control Service按钮,并添加以下代码:

private void button1ControlService_Click(object sender, EventArgs e) { if (this.serviceController1.Status.ToString() == "Stopped") { Thread.Sleep(2000); try { this.serviceController1.Start(); textBox1.Text = "Running"; textBox1.BackColor = System.Drawing.Color.Red; } catch (Exception) { MessageBox.Show("Could not start this process", "Process failed", MessageBoxButtons.OK, MessageBoxIcon.Error); this.serviceController1.Close(); } } else if (serviceController1.Status.ToString() == "Running") { Thread.Sleep(1500); try { serviceController1.Pause(); textBox1.Text = serviceController1.Status.ToString(); } catch (Exception) { MessageBox.Show("Could not pause this process", "Process failed", MessageBoxButtons.OK, MessageBoxIcon.Error); serviceController1.Close(); } } else if (serviceController1.Status.ToString() == "Paused") { Thread.Sleep(1500); try { serviceController1.Stop(); textBox1.Text = "Stopped"; textBox1.BackColor = System.Drawing.Color.Red; } catch (Exception) { MessageBox.Show("Could not Stop this process", "Process failed", MessageBoxButtons.OK, MessageBoxIcon.Error); serviceController1.Close(); } } else { Thread.Sleep(1000); serviceController1.Start(); textBox1.BackColor = System.Drawing.Color.Red; textBox1.Text = serviceController1.Status.ToString(); } listBox1.Items.Add(serviceController1.ServiceName.ToString()); }

请记住,选择的默认服务名称是Appinfo。如果没有在服务控制器属性中选择服务名称,可能会遇到异常。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485