Windows操作系统可以运行各种系统服务,从网络服务到安全服务等等。在某些情况下,系统服务可能需要由软件应用程序启动或停止。在本文中,我们将介绍如何使用.NET和C#语言启动和停止Windows操作系统中的系统服务。
第1步:引用命名空间
要使用.NET框架提供的系统服务功能,我们需要在应用程序中引用System.ServiceProcess命名空间。在C#项目中,可以使用以下语句引用它:
using System.ServiceProcess;
第2步:创建ServiceController
要访问和操作系统服务,我们需要使用ServiceController类。ServiceController类允许我们检索系统中安装的服务的详细信息,并执行以下一些操作:
检索服务状态
启动和停止服务
暂停和继续服务
以下代码演示了如何使用ServiceController类创建一个名为“SampleService”的服务控制器:
ServiceController serviceController = new ServiceController("SampleService");
第3步:检索服务状态
ServiceController类的Status属性提供了当前服务状态的详细信息。该属性返回ServiceControllerStatus枚举类型的值,表示服务状态的不同值。
以下代码演示了如何使用Status属性检索系统服务的当前状态:
if (serviceController.Status == ServiceControllerStatus.Running)
{
Console.WriteLine("服务正在运行.");
}
else if (serviceController.Status == ServiceControllerStatus.Stopped)
{
Console.WriteLine("服务已停止.");
}
else if (serviceController.Status == ServiceControllerStatus.Paused)
{
Console.WriteLine("服务已暂停.");
}
else if (serviceController.Status == ServiceControllerStatus.StartPending)
{
Console.WriteLine("服务正在启动.");
}
else if (serviceController.Status == ServiceControllerStatus.StopPending)
{
Console.WriteLine("服务正在停止.");
}
else if (serviceController.Status == ServiceControllerStatus.PausePending)
{
Console.WriteLine("服务正在暂停.");
}
else if (serviceController.Status == ServiceControllerStatus.ContinuePending)
{
Console.WriteLine("服务正在继续.");
}
在上面的代码中,我们使用Status属性检索服务的当前状态,并根据服务状态输出不同的信息到控制台。
第4步:启动和停止服务
可以使用ServiceController类的Start和Stop方法分别启动和停止系统服务。
以下代码演示了如何使用Start方法启动系统服务:
serviceController.Start();
如果系统服务已经在运行,则使用Start方法不会引发异常并且不会启动服务。
以下代码演示了如何使用Stop方法停止系统服务:
serviceController.Stop();
如果系统服务已停止,则使用Stop方法不会引发异常并且不会停止服务。
第5步:释放ServiceController
最后,我们应该释放ServiceController组件,以便将底层资源(如内存和文件句柄)返回给操作系统。可以使用Dispose方法或将ServiceController设置为null来释放该组件。
以下代码演示了如何释放ServiceController组件:
serviceController.Dispose();
serviceController = null;
根据上面的思路,在winform中,代码为:
private void zbtnstart_Click(object sender, EventArgs e)
{
zservice.MachineName = ".";
zservice.ServiceName = ztxtname.Text;
zservice.Refresh();
if (zservice.Status == ServiceControllerStatus.Running)
{
MessageBox.Show(zservice.DisplayName + " 服务正在运行");
}
else
{
zservice.Start();
MessageBox.Show(zservice.DisplayName + " 服务已开启");
}
}
private void zbtnstatus_Click(object sender, EventArgs e)
{
try
{
zservice.MachineName = ".";
zservice.ServiceName = ztxtname.Text;//Iis 服务
zservice.Refresh();
if (zservice.Status == ServiceControllerStatus.Running)
{
MessageBox.Show(zservice.DisplayName + " 服务已开启");
}
else
{
MessageBox.Show(zservice.DisplayName + " 服务已停止");
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
}
private void zbtnstop_Click(object sender, EventArgs e)
{
try
{
zservice.MachineName = ".";
zservice.ServiceName = ztxtname.Text;//Iis 服务
zservice.Refresh();
if (zservice.CanStop)
{
zservice.Stop();
MessageBox.Show(zservice.DisplayName + " 服务已停止");
}
else
{
MessageBox.Show(zservice.DisplayName + " 不可以停止");
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
}
操作步骤如下图所示: