安装服务程序
function TForm1.InstallService: Boolean;
var
schSCManager,schService:THANDLE;
strDir:array[0..1023]of char;
lpszBinaryPathName:PChar;
args: pchar;
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
//打开服务控制管理器
if schSCManager=0 then
begin
MessageBox(0,'联接服务控制管理器失败','Error',MB_OK);
Result:=false;
exit;
end;
GetCurrentDirectory(1024,strDir); // 取到应用程序所在的目录
strlcat(strDir,'/AutoSendService.exe',1024); // 当前目录下的服务应用 strDir
lpszBinaryPathName:=strDir;
schService:=CreateService(
schSCManager,// 服务控制管理句柄
'ThkEmailAutoSend', // 服务名称 需要和 服务应用名 相同
'ThkEmailAutoSend', // 显示的服务名称
SERVICE_ALL_ACCESS, // 存取权利
SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS , // 服务类型//如果服务类型是SERVICE_WIN32_SHARE_PROCESS,通常在初始化所有服务之后再调用它;SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序;
值名称 | 值设置 | 值设置说明 |
启动 | 0 = SERVICE_BOOT_START | Ntldr 或 Osloader 预加载驱动程序以便计算机启动时它就在内存中。 这些驱动程序刚好在 SERVICE_SYSTEM_START 驱动程序之前启动。 |
启动 | 1 = SERVICE_SYSTEM_START | 驱动程序在 SERVICE_BOOT_START 驱动程序初始化后加载和初始化。 |
启动 | 2 = SERVICE_AUTO_START | 服务控制管理器 (SCM) 启动驱动程序或服务。 |
启动 | 3 = SERVICE_DEMAND_START | SCM 必须按需启动驱动程序或服务。 |
启动 | 4 = SERVICE_DISABLED | 驱动程序或服务不加载或初始化。 |
类型 | 1 = SERVICE_KERNEL_DRIVER | 设备驱动程序。 |
类型 | 2 = SERVICE_FILE_SYSTEM_DRIVER | 内核模式文件系统驱动程序。 |
类型 | 8 = SERVICE_RECOGNIZER_DRIVER | 文件系统识别器驱动程序。 |
SERVICE_AUTO_START, // 启动类型
SERVICE_ERROR_NORMAL, // 错误控制类型 ,Normal为记录入日志,不弹出,如果是更严格的控制类型则弹出错误
lpszBinaryPathName, // 服务程序
nil, // 组服务名称
nil, // 组标识
nil, // 依赖的服务
nil, // 启动服务帐号
nil); // 启动服务口令
if schService = 0 then
begin
MessageBox(0,'无法建立指定的服务对象','Error',MB_OK);
Result:=false;
exit;
end;
args := nil;
StartService(schService, 0, args);
CloseServiceHandle(schService);
MessageBox(0,'已经成功地安装了服务对象','信息',MB_OK);
Result:=true;
end;