我如何使用svchost.exe来托管我自己的服务?

时间:2011-12-28 10:08:16

标签: c# registry

我已经用C#编写了一个服务。我将我的服务的DLL保存在c:\ windows \ system32 \ myservice.dll中。我已经为svchost.exe中的托管做了必要的注册表更改,但我的服务没有被执行。它得到1053错误代码。

以下是myservice的注册表项。我创建了一个密钥,并给出了myservice.dll文件的路径。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\svcsvc2]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,4c,00,6f,00,63,00,61,00,6c,00,53,00,65,00,72,00,76,00,69,00,63,\
00,65,00,00,00
"DisplayName"="@%SystemRoot%\\system32\\svcsvc.dll,-200"
"ObjectName"="NT AUTHORITY\\LocalService"
"ServiceSidType"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\svcsvc2\Parameter]
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\
00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\
73,00,76,00,63,00,73,00,76,00,63,00,2e,00,64,00,6c,00,6c,00,00,00
"ServiceMain"="Main"

3 个答案:

答案 0 :(得分:2)

1053是ERROR_SERVICE_REQUEST_TIMEOUT

  

该服务未响应a中的启动或控制请求   及时时尚。

未调用StartServiceCtrlDispatcher?

您还可以将类型设置为SERVICE_WIN32_OWN_PROCESS,而不是SERVICE_WIN32_SHARE_PROCESS

请尊重this note from MSDN

  

请注意,Svchost.exe保留供操作系统使用   不应由非Windows服务使用。相反,开发人员应该   实施自己的服务托管计划。

答案 1 :(得分:1)

svchost不承载.NET框架,因此无法执行.NET程序集。

.NET服务使用自己的应用程序(.exe)运行。

答案 2 :(得分:0)

为什么不在VS中创建安装服务的安装项目?

除非您想以编程方式安装服务,否则我建议您阅读this文章。