使用.Net框架类库中自带的组件ServiceController可以实现对Windows服务的操作。创建 ServiceController 的实例后,必须为其设置两个属性来标识与其交互的服务:计算机名称和要控制的服务的名称,MachineName 默认设置为本地计算机,除非想将该实例设置为指向另一台计算机不,否则不要修改。
方法:ServiceController.GetServices()返回非设备驱动程序服务和不是驱动程序的服务。若要检索设备驱动程序服务,请调用 GetDevices 方法。这两种方法一起提供对计算机上所有服务的访问。
属性:Status表示现有服务的运行状态。取值包括:
ContinuePending 服务即将继续。
Paused 服务已暂停。
PausePending 服务即将暂停。
Running 服务正在运行。
StartPending 服务正在启动。
Stopped 服务未运行。
StopPending 服务正在停止。
下面的示例用于显示本机上的所有非设备驱动程序服务和设备程序服务,并完成MSSQLServer服务的启动与关闭:
using System.ServiceProcess; //需要添加引用
private void frm14ServiceController_Load(object sender, EventArgs e)
{
//获取当前计算机上的所有非设备驱动程序服务
//和不是驱动程序的服务
dataGridView2.DataSource = ServiceController.GetServices();
//获取当前计算机上的所有设备驱动程序服务
dataGridView1.DataSource = ServiceController.GetDevices();
}
//服务开始
private void btnStartSQL_Click(object sender, EventArgs e)
{
//实例化一个服务控制器对象
ServiceController scSQL = new ServiceController();
//指定服务所在的主机名称,默认为本机,所以可以不要设置
scSQL.MachineName = ".";
//指定服务名称
scSQL.ServiceName = "MSSQLServer";
//如果服务关闭了
if (scSQL.Status == ServiceControllerStatus.Stopped)
{
//开启服务
scSQL.Start();
MessageBox.Show(scSQL.ServiceName+"服务开启成功");
}
else
{
MessageBox.Show(scSQL.ServiceName+"服务没有停止");
}
}
//服务停止
private void btnEndSQL_Click(object sender, EventArgs e)
{
//实例化一个服务控制器对象
ServiceController scSQL = new ServiceController();
//指定服务名称
scSQL.ServiceName = "MSSQLServer";
//如果能关闭
if (scSQL.CanStop)
{
//如果服务开始了
if (scSQL.Status == ServiceControllerStatus.Running)
{
//停止
scSQL.Stop();
MessageBox.Show(scSQL.ServiceName + "服务停止成功");
}
else
{
MessageBox.Show(scSQL.ServiceName + "服务没有运行");
}
}
else
{
MessageBox.Show(scSQL.ServiceName + "服务不能停止");
}
}
此外服务类型主要分为:
Adapter 用于需要自己的驱动程序的硬件设备的服务。
FileSystemDriver 文件系统驱动程序,也是“内核”(Kernel) 设备驱动程序。
InteractiveProcess 可与桌面通信的服务。
KernelDriver “内核”(Kernel) 设备驱动程序,如硬盘或其他低级别硬件设备驱动程序。
RecognizerDriver 文件系统驱动程序,用于在启动时确定系统中存在的文件系统。
Win32OwnProcess Win32 程序,可由“服务控制器”启动,并遵守服务控制协议。此类 Win32 服务单独运行在一个进程中。 Win32ShareProcess Win32 服务,可与其他 Win32 服务共享进程。