CreateService
2012年01月09日
VB C# C++ F# JScript Copy SC_HANDLE CreateService( SC_HANDLE hSCManager, //服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCManager 返回 LPCTSTR lpServiceName, //以NULL 结尾的服务名,用于创建登记数据库中的关键字 LPCTSTR lpDisplayName, //以NULL 结尾的服务名,用于用户界面标识服务 DWORD dwDesiredAccess, //指定服务返回类型 DWORD dwServiceType, //指定服务类型 DWORD dwStartType, //指定何时启动服务 DWORD dwErrorControl, //指定服务启动失败的严重程度 LPCTSTR lpBinaryPathName, //指定服务程序二进制文件的路径 LPCTSTR lpLoadOrderGroup, //指定顺序装入的服务组名 LPDWORD lpdwTagId, //忽略,NULL LPCTSTR lpDependencies, //指定启动该服务前必须先启动的服务或服务组 LPCTSTR lpServiceStartName, //以NULL 结尾的字符串,指定服务帐号。如是NULL,则表示使用LocalSystem 帐号 LPCTSTR lpPassword //以NULL 结尾的字符串,指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULL ); 参数 hSCManager 服务控制管理器数据库的句柄。 此句柄由 OpenSCManager 函数返回,并且必须 具有 SC_MANAGER_CREATE_SERVICE 的访问权限。 有关更多的信息请参阅 Service 安全和访问权限。 lpServiceName 要安装该服务的名称。 最大字符串长度为 256 个字符。服务控制管理器数据库将保留在的字符的大小写,但是服务名称比较总是区分大小写。 正斜杠和一个反斜线不是有效的服务名称字符。 lpDisplayName[可选] 对被用户界面程序用来识别服务的显示名称。 此字符串具有最大长度为 256 个字符。 服务控制管理器中的情况下保留名称。 显示名称比较总是不区分大小写。 dwDesiredAccess 对服务的访问。 请求的访问之前,系统将检查调用进程的访问令牌。一个值列表请参阅服务安全和访问权限。 dwServiceType 服务类型。 此参数可以是下列值之一:
值 作用
SERVICE_ADAPTER
0x00000004 保留
SERVICE_FILE_SYSTEM_DRIVER
0x00000002 文件系统驱动服务程序
SERVICE_KERNEL_DRIVER
0x00000001 驱动服务程序
SERVICE_RECOGNIZER_DRIVER
0x00000008 保留
SERVICE_WIN32_OWN_PROCESS
0x00000010 运行于独立进程的服务程序
SERVICE_WIN32_SHARE_PROCESS
0x00000020 被多个进程共享的服务程序。查询Service Programs以获取更多信息。
若使用了SERVICE_WIN32_OWN_PROCESS 或 SERVICE_WIN32_SHARE_PROCESS且使用LocalSystem帐号来运行该服务程序,则还可以附加使用下面的值:
值 含义
SERVICE_INTERACTIVE_PROCESS
0x00000100 该服务可以与桌面程序进行交互操作。
查询Interactive Services以获取更多消息。
值 含义
SERVICE_AUTO_START
0x00000002 系统启动时由服务控制管理器自动启动该服务程序。
查询Automatically Starting Services以获取更多信息。
SERVICE_BOOT_START
0x00000000 用于由系统加载器创建的设备驱动程序。
只能用于驱动服务程序。
SERVICE_DEMAND_START
0x00000003 用于当有进程调用StartService 函数时由服务控制管理器(SCM)启动的服务。
查询Starting Services on Demand以获取更多信息。
SERVICE_DISABLED
0x00000004 表示该服务不可启动。
尝试启动该服务将产生一个ERROR_SERVICE_DISABLED错误。
SERVICE_SYSTEM_START
0x00000001 用于由IoInitSystem 函数创建的设备驱动程序。
只能用于驱动服务程序。
dwErrorControl 当该启动服务失败时产生错误的严重程度以及采取的保护措施。此参数可以是下列值之一:
值 含义
SERVICE_ERROR_CRITICAL
0x00000003 服务启动程序将把该错误记录到事件日志中。
若最后一次正确配置可用,服务启动程序将以最后一次正确配置重新启动;
否则将退出执行。
SERVICE_ERROR_IGNORE
0x00000000 服务启动程序将忽略该错误并返回继续执行。
SERVICE_ERROR_NORMAL
0x00000001 服务启动程序将把该错误记录到事件日志中并返回继续执行。
SERVICE_ERROR_SEVERE
0x00000002 服务启动程序将把该错误记录到事件日志中。
若最后一次正确配置可用,服务启动程序将以最后一次正确配置重新启动;
否则将返回继续执行。
lpBinaryPathName [可选] 服务程序二进制文件,完全限定路径。如果路径中包含空格它必须被引用,以便它正确的解析。例如"d:\myshare\myservice.exe"应指定为""d:\myshare\myservice.exe""。该路径也可以包含一个自动启动服务的参数。例如"d:\myshare\myservice.exe arg1 arg2"。 这些参数被传递给服务的入口点通常主要作用。 如果另一台计算机上指定一个路径,共享必须可以访问由本地计算机的计算机帐户,因为这是在远程调用中使用的安全上下文。但是,这项规定会影响本地计算机远程计算机中允许任何潜在的漏洞。 因此,最好使用一个本地文件。 lpLoadOrderGroup [可选] 在加载顺序此服务所属的组的名称。 指定 NULL 或空字符串,如果该服务不属于组。 启动程序使用加载顺序组加载服务相对于其他组的指定顺序组。加载顺序组列表包含在下面的注册表值:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Contr ol\ServiceGroupOrder] lpdwTagId[可选] 指向接收 lpLoadOrderGroup 参数中指定的组中唯一的标记值的变量。如果不更改现有的标签,请指定 NULL。订购服务启动一个加载顺序通过在以下注册表值中指定标记顺序矢量的组中,您可以使用的标记:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Contr ol\GroupOrderList]。标记只能用于具有 SERVICE_BOOT_START 或启动类型的 SERVICE_SYSTEM_START 驱动程序服务。 lpDependencies [可选] 空分隔名称的服务或加载顺序组系统必须在这个服务开始之前的双空终止数组的指针。 如果服务没有任何依赖关系,请指定为 NULL 或空字符串。一组依赖意味着如果至少一个组的成员运行后试图启动组的所有成员,可以运行此服务。当需要区分各服务由于服务和服务组共享相同的命名空间前缀与 SC_GROUP_IDENTIFIER 的组名时必须加上此参数。 lpServiceStartName [可选] 该服务应在其下运行的帐户的名称。如果SERVICE_WIN32_OWN_PROCESS 服务类型 DomainNameUserName 窗体中使用一个帐户名。服务进程将被作为此用户登录。 如果该帐户属于内置域,您可以指定.UserName。 如果为 NULL 此参数 CreateService 使用 LocalSystem 帐户。 如果服务类型指定 SERVICE_INTERACTIVE_PROCESS,该服务必须运行在 LocalSystem 帐户。 如果 NT AUTHORITYLocalService 此参数 CreateService 使用 LocalService 帐户。 如果 NT AUTHORITYNetworkService 参数 CreateService 使用 NetworkService 帐户。 共享的处理可以运行于任何用户。 如果服务类型 SERVICE_KERNEL_DRIVER 或 SERVICE_FILE_SYSTEM_DRIVER 名称是系统用来加载设备驱动程序的驱动程序对象名称。 如果该驱动程序将使用由 IO 系统创建的默认对象名称,请指定 NULL。 可以将服务配置为使用一个托管的帐户或虚拟帐户。 如果该服务被配置为使用一个托管的服务帐户,名称是托管的服务帐户名称。如果该服务被配置为使用一个虚拟帐户,作为 NT SERVICEServiceName 指定名称。有关托管的服务帐户和虚拟帐户的详细信息请参阅服务帐户的分步指南。 Windows Server 2008、 Windows Vista、 Windows Server 2003 和 Windows XP2000: Windows 7 和 Windows Server 2008 R2 之前不支持托管的服务帐户和虚拟帐户。 lpPassword [in, optional] 由 lpServiceStartName 参数指定的帐户名的密码。 如果该帐户没有密码,或者如果在 LocalService,NetworkService 或 LocalSystem 帐户中运行该服务,请指定一个空字符串。 更多的信息请参阅服务记录列表。 如果托管的服务帐户或虚拟帐户名称的名称由 lpServiceStartName 参数指定的帐户名称 lpPassword 参数必须为 NULL。 密码将被忽略,对驱动程序服务。 返回值 如果函数成功,返回值将是该服务的句柄。 如果函数失败,则返回值为 NULL。 若要扩展的错误了解调用 GetLastError。 下面的错误代码可以由服务控制管理器设置。 其他错误代码可以设置的由服务控制管理器调用注册表函数。
返回值 描述
ERROR_ACCESS_DENIED 提供的hSCManager参数没有SC_MANAGER_CREATE_SERVICE权限。
ERROR_CIRCULAR_DEPENDENCY 存在循环嵌套的服务依赖关系。
ERROR_DUPLICATE_SERVICE_NAME 显示名称已在SCM中被其他服务注册为服务名称或显示名称。
ERROR_INVALID_HANDLE 提供的hSCManager参数无效。
ERROR_INVALID_NAME 提供的服务名称无效。
ERROR_INVALID_PARAMETER 其他参数无效。
ERROR_INVALID_SERVICE_ACCOUNT 由lpServiceStartName参数指定的用户名不存在。
ERROR_SERVICE_EXISTS 已存在完全相同的服务。
CreateService函数创建一个服务对象并将其安装在SCM数据库中,同时在注册表以下位置中创建同名键值:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servi ces] 由CreateService、ChangeServiceConfig 和 ChangeServiceConfig2 等函数创建服务时提供的服务相关信息就存放于这个键值中。以下是一些键值的描述:
值 描述
DependOnGroup 由lpDependencies参数指定的依赖性服务群组,包含加载顺序。
DependOnService 由lpDependencies参数指定的依赖性服务。
Description 由ChangeServiceConfig2函数写入的描述信息。
DisplayName 由lpDisplayName参数指定的服务显示名称。
ErrorControl 由dwErrorControl参数指定的纠错方案。
FailureActions 由ChangeServiceConfig2函数写入的异常信息。
Group 由lpLoadOrderGroup参数指定的服务群组,包含加载顺序。
(设置该值将有可能覆盖DependOnService的值。)
ImagePath 由lpBinaryPathName参数指定的服务程序文件位置。
ObjectName 由lpServiceStartName参数指定的名称。
Start 由dwStartType参数指定的服务启动时间。
Tag 由lpdwTagId参数指定的识别信息。
Type 由dwServiceType参数指定的服务类型。
服务安装程序可以创建子键来提供更多额外的信息。 CreateService函数返回的句柄只能由调用它的进程使用,可以调用CloseServiceHandle函数来关掉这个句柄。若创建进程共享服务,请不要随意调用可能影响其他进程的函数,如ExitProcess。另外,请不要卸载服务程序的动态链接库(DLL文件)。
搜索“如何安装服务程序”以查询一个示例。本页最下方包含一个Delphi示例。
[/b][b] SC_HANDLE CreateService( SC_HANDLE hSCManager, //服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCManager 返回 LPCTSTR lpServiceName, //以NULL 结尾的服务名,用于创建登记数据库中的关键字 LPCTSTR lpDisplayName, //以NULL 结尾的服务名,用于用户界面标识服务 DWORD dwDesiredAccess, //指定服务返回类型 DWORD dwServiceType, //指定服务类型 DWORD dwStartType, //指定何时启动服务 DWORD dwErrorControl, //指定服务启动失败的严重程度 LPCTSTR lpBinaryPathName, //指定服务程序二进制文件的路径 LPCTSTR lpLoadOrderGroup, //指定顺序装入的服务组名 LPDWORD lpdwTagId, //忽略,NULL LPCTSTR lpDependencies, //指定启动该服务前必须先启动的服务或服务组 LPCTSTR lpServiceStartName, //以NULL 结尾的字符串,指定服务帐号。如是NULL,则表示使用LocalSystem 帐号 LPCTSTR lpPassword //以NULL 结尾的字符串,指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULL ); 其中dwStartType取值类型如下: 共有五种启动类型。前三种类型是:SERVICE_AUTO_START、SERVICE_DISABLED 和 SERVICE_DEMAND_START。对应的标准启动类型:自动、禁用和手动,通常使用“计算机管理”管理工具中的“服务”进行配置。后两种类型是:SERVICE_BOOT_START 和 SERVICE_SYSTEM_START,通常用于配置加载设备驱动程序的方式。例如,在启动计算机时或启动 Windows 2000 时加载。 Delphi sample: Procedure InstallSelfToSvr(); var hscm,hsvr:THandle; PCPathName:PAnsiChar; begin try hscm := OpenSCManager(nil,nil,SM_MANAGER_ALL_ACCESS); if hscm = 0 then exit; PCPathName := pchar(paramstr(0)); hsvr := CreateService(hscm,'MyService','MyService Display Name',SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS ,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,PCPathName ,nil,nil,nil,nil,nil); CloseServiceHandle(hsvr); CloseServiceHandle(hscm); except end; end;
发表评论
-
美国《越柬寮周报》发诗一首(2012-01-19 19:03:37)
2012-01-20 11:09 711美国《越柬寮周报》发 ... -
[转载]C罗皇马蜜月结束 “独性”不改或遭弃
2012-01-20 11:09 569[转载]C罗皇马蜜月结束 ... -
卷起不来了,数据库down掉了,怎么办-
2012-01-19 16:01 753卷起不来了,数据库down掉了,怎么办- 2011年12月2 ... -
not-null property references a null or transient value: com.meadvillegroup.weberp.model.MtgMaIssuew
2012-01-19 16:01 884not-null property references a ... -
www.cn403.comADODB中文手册(4)
2012-01-19 16:01 445www.cn403.comADODB中文手册(4) 2011 ... -
hacmp 同步报错
2012-01-19 16:01 626hacmp 同步报错 2011年12月20日 hacm ... -
很久很久以前的事
2012-01-17 05:53 612很久很久以前的事 2010年08月01日 今天给自己的大 ... -
2011-9-15
2012-01-17 05:53 4942011-9-15 2011年09月15日 第 1课时 ... -
如何培养一年级学生良好的学习习惯
2012-01-17 05:53 626如何培养一年级学生良好的学习习惯 2011年06月28日 ... -
各位家长非常辛苦,其他老师也很辛苦,孩子也很辛苦。希望我们相互理解,用朋友的角度去商量让孩子变的好起来
2012-01-17 05:52 740各位家长非常辛苦,其他 ... -
专项训练二十一
2012-01-16 04:39 648专项训练二十一 2012年0 ... -
再见,2011
2012-01-16 04:39 677再见,2011 2011年12月25日 ... -
儒家思想
2012-01-16 04:39 602儒家思想 2012年01月14日 ... -
2011.11.29日课《孝经》第十八章:丧亲章第十八――梁小琴
2012-01-16 04:39 6282011.11.29日课《孝经》第十八章:丧亲章第十八――梁小 ... -
关于史书体裁
2012-01-16 04:39 820关于史书体裁 12小时前 ...
相关推荐
【企业库02-CreateService】是针对企业级应用开发中的服务创建与管理的一个专题,主要探讨如何在软件系统中高效、稳定地构建和管理服务。在这个专题中,我们将深入理解服务的概念,学习如何创建、注册、管理和控制...
在这个过程中,`CreateService`函数是关键。 Windows服务是一种可以在用户登录或不登录的情况下独立运行的应用程序,它们通常用于执行系统级任务,如自动更新、日志记录、数据库维护等。开发者可以利用Windows API...
1. **CreateService()**: 这个API用于创建一个新的服务项在服务控制管理器数据库中。它需要服务的显示名称、服务名、可执行文件路径等参数。 2. **StartService()**: 当服务需要启动时,调用这个函数。它告诉服务...
在驱动程序的安装过程中,需要使用OpenSCManager函数打开服务控制管理器,CreateService函数创建驱动程序所需的注册表键值,StartService函数启动驱动程序。卸载驱动程序时,需要使用DeleteService函数删除驱动程序...
需要用户自行完成该函数的实现,以便在 QQ 进程调用 CreateService 函数时,能够跳转到自定义的函数中。 7. MyCreateTextServices:这是一个自定义的函数,用于拦截 CreateService 函数的调用,并获取聊天消息。...
文件系统过滤驱动程序,拦截读写操作,测试程序下载驱动时,Createservice,startservice出错,Createservice出错码有时报1072,有时报1073,startservice出错码有时报1,有时报183,还有就是那测试驱动程序中,对应的驱动...
这包括创建服务(`CreateService`函数),修改服务配置(`ChangeServiceConfig`和`ChangeServiceConfig2`),以及如何将这些操作整合到实际的应用程序中。对于想要深入理解Windows服务管理和编程的开发者来说,这是...
无论是使用`sc`命令、`CreateService` API还是专用工具,都需要理解服务的概念及其工作方式,以便正确地配置和管理这些服务。在实际应用中,应确保服务的稳定性和安全性,避免对系统造成不必要的负担。
在Windows系统服务中,`CreateService`函数用于创建一个新的服务项,而`StartService`函数则是用来启动已创建或已经存在的服务。`StartService`函数接受三个参数:服务句柄、启动参数的数量以及启动参数的数组。服务...
3. **服务创建与配置**: 如果服务尚未创建,需要使用`CreateService`函数创建服务。如果服务已经存在,可以使用`ChangeServiceConfig2`来修改服务配置,允许服务进行用户模拟。设置`SERVICE_CONFIG_REQUIRED_...
- 在描述中提到的`CreateService`函数是创建服务的关键,它通过向服务控制管理器(Service Control Manager,SCM)注册服务来实现。`CreateService`函数需要提供服务的名称、显示名称、访问权限、服务类型、启动...
总之,使用C++创建Windows服务涉及对Windows API的深入理解和应用,通过`OpenSCManager`、`CreateService`等函数,我们可以构建自己的服务并在系统后台稳定运行。这是一个涉及到系统编程和进程管理的重要技能,对于...
首先,`Cjwdev.WindowsApi`库可能包含了一些关键功能,例如`CreateService`、`StartService`等方法,这些方法允许开发者创建新的服务并启动它们。`CreateService`方法用于在服务控制管理器数据库中创建一个新的服务...
例如,我们可以有一个名为`MyServiceFactory`的类,其中包含一个名为`createService`的静态方法,返回一个`MyService`实例。 ```java public class MyServiceFactory { public static MyService createService() {...
其中,`CreateService()`函数用于创建一个新的服务,`DeleteService()`函数则用于删除已存在的服务。这两个函数都在`advapi32.dll`库中定义。 1. **安装服务**: - `CreateService()`函数接收多个参数,包括服务名...
Windows API提供了`CreateService`函数用于创建新的服务,`StartService`用于启动服务,`ControlService`用于控制服务的状态(如暂停、继续或停止),而`DeleteService`则用于删除服务。这些API都在`advapi32.dll`库...
在Windows系统中,我们可以使用`CreateService`函数来创建一个新的系统服务。 `CreateService`是Windows API中的一个重要函数,它允许开发者向系统注册一个新的服务。该函数需要传入服务名、显示名、服务类型、启动...
我们可以定义一个工厂类`ServiceFactory`,其中包含一个静态方法`CreateService`,该方法接受一个字符串参数,表示要创建的服务类型。工厂方法可以根据输入的字符串使用反射创建相应的服务实例: ```csharp public ...
Caused by: org.hibernate.boot.registry.selector.spi.... at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:261) at org.hibernate.service.i
此外,还需要使用`CreateService`和`StartService` API来添加服务并启动驱动。 接下来,让我们看看如何实现这个过程: 1. 创建驱动服务: 使用`CreateService`函数创建一个服务,该服务对应于你的驱动程序。你...