开发了服务,总要开发一个设置界面来开启或停止服务.
服务的启动方式有两种:
1.手动运行:手动运行,则每次都要手动去开启服务,开启了服务后,只要重启计算机,服务又会被停止.
2.自动运行:当服务被设置以自动运行方式安装,安装后服务是不会自动启动的(无论选择自动或手动,服务刚安装完时,状态都是停止的),但重启后服务就会自动启运,就算停止了服务,只要启动状态是自动,那么重启计算机后,服务又会自动运行的.
由于开发的需要,我的设置程序要实现几项功能:
1.可以开启或停止服务.
2.如果选择开启,那么启动类型就要设为自动.
3.如果选择停止,那么启动类型就要设为手动,以免重启后又自动执行.
这也是我写这篇目章的目的.
1.其实要实现这几个功能一点都不难,难就难在相关的资料少.
首先讲讲设置服务运行状态:
用C#的ServiceProcess. ServiceController就可以实现,以下是实现代码
view plaincopy to clipboardprint?
using System.ServiceProcess;
ServiceController AlarmCon=new ServiceController("AlarmService");
//获取要控制的服务对象
if (AlarmCon.Status==ServiceControllerStatus.Running)
{
butAlStart.Enabled = false;
butAlStop.Enabled = true;
}
else
{
butAlStart.Enabled = true;
butAlStop.Enabled = false;
}
using System.ServiceProcess;
ServiceController AlarmCon=new ServiceController("AlarmService");
//获取要控制的服务对象
if (AlarmCon.Status==ServiceControllerStatus.Running)
{
butAlStart.Enabled = false;
butAlStop.Enabled = true;
}
else
{
butAlStart.Enabled = true;
butAlStop.Enabled = false;
}
如果要设置运行状态只要如下即可
view plaincopy to clipboardprint?
AlarmCon.Start();
AlarmCon.WaitForStatus(ServiceControllerStatus.Running);
//等到服务的状态起效才往下执行
GetAlarmServiceState();
AlarmCon.Start();
AlarmCon.WaitForStatus(ServiceControllerStatus.Running);
//等到服务的状态起效才往下执行
GetAlarmServiceState();
2.如何改变服务的启动方式呢,原来是要通过修改注册表来实现
view plaincopy to clipboardprint?
using Microsoft.Win32;
string keyPath = @"SYSTEM/CurrentControlSet/Services/AlarmService";
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true);
key.SetValue("Start", 2);
//2:自动启动,3:手动启动,4:禁用
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/turejackon/archive/2009/01/14/3779993.aspx