在本文中,将学习如何通过Windows Forms应用程序控制安装在机器上的服务。这个应用程序将能够列出并显示所有可用的服务,控制特定服务,并显示详细的服务信息。
要完成这个项目,需要具备C#的中级知识,并且熟悉Windows Forms应用程序。
首先,需要创建一个新的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。如果没有在服务控制器属性中选择服务名称,可能会遇到异常。