这不是一篇关于windows服务和注册表编辑的全面解释文章。
-------------------------------------------------------------
我们知道, 在C#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成:
//ACPI is an example of service name
System.ServiceProcess.ServiceController service = new ServiceController("ACPI");
service.Start();
但是这样有一个问题, 如果服务类型是Disabled, 那么start方法就会引发异常。 一般的做法是先修改服务的启动类型, 然后启动该服务:
using Microsoft.Win32;
string keyPath = @"SYSTEM\CurrentControlSet\Services\ACPI";
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true);
int val = -1;
bool bConverted = Int32.TryParse(key.GetValue("Start").ToString(), out val);
if(bConverted)
{
if ( val == 4)
{
key.SetValue("Start", 3);
}
}
System.ServiceProcess.ServiceController service = new ServiceController("ACPI");
service.Start();
总结一下修改服务的启动方式有两种方法:
1. 修改注册表
windows 服务的注册表地址为 : [\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName]
其中子键Start代表了启动类型. 类如"Start"=dword:00000002
其中2为Automatic, 3为Manul, 4为Disabled
2.用API
BOOL ChangeServiceConfig(
SC_HANDLE hService,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCTSTR lpBinaryPathName,
LPCTSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCTSTR lpDependencies,
LPCTSTR lpServiceStartName,
LPCTSTR lpPassword,
LPCTSTR lpDisplayName
);
这篇文章使用了方法1.