欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#启动windows服务方法的相关问题分析

程序员文章站 2023-12-10 22:53:28
c#启动windows服务的方法都是什么呢?c#启动服务类型为disabled的windows服务会遇到什么样的问题呢?那么本文就向你介绍c#启动windows服务的方法的...
c#启动windows服务的方法都是什么呢?c#启动服务类型为disabled的windows服务会遇到什么样的问题呢?那么本文就向你介绍c#启动windows服务的方法的相关内容。

c#启动windows服务的方法是什么呢?来让我们开始吧:
c#启动windows服务的由来:我们知道, 在c#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成:
复制代码 代码如下:

//acpi is an example of service name
system.serviceprocess.servicecontroller
service = new servicecontroller("acpi");
service.start();

c#启动windows服务遇到的问题, 如果服务类型是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();

总结一下修改服务的启动方式有两种方法:
c#启动windows服务1. 修改注册表
windows 服务的注册表地址为 :
[\hkey_local_machine\system\currentcontrolset\services\servicename]
其中子键start代表了启动类型. 类如"start"=dword:00000002
其中2为automatic, 3为manul, 4为disabled
c#启动windows服务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
);

c#启动windows服务的方法浅析就向你介绍到这里,希望对你学习和了解c#启动windows服务有所帮助。