在程序1.exe中使用 hService = CreateService(hServiceMgr,
"a",
"a",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_SHARE_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
"c:\\1.exe",
NULL,
NULL,
NULL,
NULL,
NULL);bStartService = StartService(hService , NULL, NULL);为什么总是失败,提示2001错误,无效的服务。这样自身把自身创建为服务并启动可以么?
"a",
"a",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_SHARE_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
"c:\\1.exe",
NULL,
NULL,
NULL,
NULL,
NULL);bStartService = StartService(hService , NULL, NULL);为什么总是失败,提示2001错误,无效的服务。这样自身把自身创建为服务并启动可以么?
第一:1.exe是不是服务程序啊?因为CreateService是安装服务的,一般情况安装功能既可以和服务程序写在一起,也可以单独写成一个普通程序。
第二:SERVICE_WIN32_SHARE_PROCESS,你的服务程序是不是真的多个服务共用一个进程?
楼主也可以搜索一下 service.cpp文件,一个很通用的服务程序模板
以下这段是我使用的code
希望對你有幫助 //打开服务控制管理器
SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCM == NULL)
{
return FALSE;
} // Get the executable file path
TCHAR szFilePath[MAX_PATH];
::GetModuleFileName(NULL, szFilePath, MAX_PATH); //创建服务
SC_HANDLE hService = ::CreateService(
hSCM, szServiceName, szServiceName,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
szFilePath, NULL, NULL, L"", NULL, NULL); if (hService == NULL)
{
::CloseServiceHandle(hSCM);
return FALSE;
} //改变服务描述
SERVICE_DESCRIPTION Description;
TCHAR szDescription[1024];
ZeroMemory(szDescription, 1024);
ZeroMemory(&Description, sizeof(SERVICE_DESCRIPTION));
lstrcpy(szDescription, _T("服務的描述."));
Description.lpDescription = szDescription;
::ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &Description);
//开始服务
::StartService(hService,0,NULL);
::CloseServiceHandle(hService);
::CloseServiceHandle(hSCM);
把程序自身註冊為服務,自動啟動服務