StartServiceCtrlDispatcher()函数失败

Caney 2003-09-28 01:43:09
代码如下:
SERVICE_TABLE_ENTRY DispatchTable[] =
{
{ TEXT("MyService"), MyServiceMain },
{ NULL, NULL }
};

void main(int argc, char *argv[] )
{
if (! StartServiceCtrlDispatcher( DispatchTable ) )
SvcDebugOut(" [SEVERTEST] StartServiceCtrlDispatcher error = %d\n", GetLastError());
else
printf("OK");
}

GetLastError返回1063,由于我是日文操作系统所以不知道是什么错误信息,请高手指点!
...全文
1254 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxxny 2003-09-30
  • 打赏
  • 举报
回复
接分!
flyelf 2003-09-29
  • 打赏
  • 举报
回复
贴出MyServiceMain代码分析一下
Caney 2003-09-29
  • 打赏
  • 举报
回复
Caney 2003-09-29
  • 打赏
  • 举报
回复
install()成功后,在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services有我建立的服务子键。控制面板中也显示服务,只是StartServiceCtrlDispatcher始终失败!
郁闷,求教!!!!!!!!!!
Caney 2003-09-29
  • 打赏
  • 举报
回复
注册了:
实际的main()代码如下!
void main(int argc, char *argv[] )
{
if (argc > 2)
UnInstall("MyService");

if (argc > 1)
Install(argv[0], "MyService", "Caney");

if (! StartServiceCtrlDispatcher( DispatchTable ) )
SvcDebugOut(" [MSEVER] StartServiceCtrlDispatcher error = %d\n", GetLastError());
}
////////////////////////////////////////////////////////////
VOID Install(char *path, char *internalName, char *descriptiveName) {
SC_HANDLE schSCManager;
SC_HANDLE schService;
LPCTSTR lpszDisplayName;
LPCTSTR lpszBinaryPathName;

schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_CREATE_SERVICE);

if (schSCManager == NULL)
printf("ERROR on OpenSCManager\n");

lpszDisplayName = TEXT(descriptiveName);
lpszBinaryPathName = path;

schService = CreateService(
schSCManager, /* SCManager database */
TEXT(internalName), /* name of service */
lpszDisplayName, /* service name to display */
SERVICE_ALL_ACCESS, /* desired access */
SERVICE_WIN32_OWN_PROCESS, /* service type */
SERVICE_DEMAND_START, /* start type */
SERVICE_ERROR_NORMAL, /* error control type */
lpszBinaryPathName, /* service's binary */
NULL, /* no load ordering group */
NULL, /* no tag identifier */
NULL, /* no dependencies */
NULL, /* LocalSystem account */
NULL); /* no password */

if (schService == NULL)
printf("ERROR on CreateService\n");
else
printf("Service Installed\n");

CloseServiceHandle(schService);

exit(1);
}

其中INSTALL()是执行成功的,但StartServiceCtrlDispatcher()始终不成功,返回1063的错误
Caney 2003-09-29
  • 打赏
  • 举报
回复
再顶,郁闷!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Caney 2003-09-29
  • 打赏
  • 举报
回复
黑豆兄帖出来的和我一样啊,但问题是StartServiceCtrlDispatcher失败SCM怎么会去掉用MyServiceMain呢?
我在MyServiceMain加了断点,但根本不运行进来!
Caney 2003-09-29
  • 打赏
  • 举报
回复
我贴
//////////////////////////////////////////////////////////////////////
//
// This routine gets used to start your service
//
VOID WINAPI MyServiceMain( DWORD dwArgc, LPTSTR *lpszArgv )
{
DWORD status;
DWORD specificError;

MyServiceStatus.dwServiceType = SERVICE_WIN32;
MyServiceStatus.dwCurrentState = SERVICE_START_PENDING;
MyServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE;
MyServiceStatus.dwWin32ExitCode = 0;
MyServiceStatus.dwServiceSpecificExitCode = 0;
MyServiceStatus.dwCheckPoint = 0;
MyServiceStatus.dwWaitHint = 0;

MyServiceStatusHandle = RegisterServiceCtrlHandler( TEXT("MyService"), MyServiceHandler);

if (MyServiceStatusHandle == (SERVICE_STATUS_HANDLE)0) {
SvcDebugOut(" [MSEVER] RegisterServiceCtrlHandler failed %d\n", GetLastError());
return;
}

// Initialization code goes here.
status = 0;

// Handle error condition
if (status != NO_ERROR) {
MyServiceStatus.dwCurrentState = SERVICE_STOPPED;
MyServiceStatus.dwCheckPoint = 0;
MyServiceStatus.dwWaitHint = 0;
MyServiceStatus.dwWin32ExitCode = status;
MyServiceStatus.dwServiceSpecificExitCode = specificError;

SetServiceStatus (MyServiceStatusHandle, &MyServiceStatus);
return;
}

// Initialization complete - report running status
MyServiceStatus.dwCurrentState = SERVICE_RUNNING;
MyServiceStatus.dwCheckPoint = 0;
MyServiceStatus.dwWaitHint = 0;

if (!SetServiceStatus (MyServiceStatusHandle, &MyServiceStatus)) {
status = GetLastError();
SvcDebugOut(" [MSEVER] SetServiceStatus error %ld\n",status);
}

// This is where the service does its work. //
StartServiceB();
SvcDebugOut(" [MSEVER] Returning the Main Thread \n",0);

return;
}
xiaohedou 2003-09-29
  • 打赏
  • 举报
回复
这样:

main()
{
.....
SERVICE_TABLE_ENTRY DispatchTable[]={{"Service1",ServiceMain},{NULL,NULL}};
StartServiceCtrlDispatcher(DispatchTable);
}

void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{

DWORD status;
DWORD specificError;

m_ServiceStatus.dwServiceType = SERVICE_WIN32;
m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwServiceSpecificExitCode = 0;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;

m_ServiceStatusHandle = RegisterServiceCtrlHandler("Service1",ServiceCtrlHandler);
if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
{
return;
}

m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
{

}

bRunning=true;
while(bRunning)
{
Sleep(3000);
//Place Your Code for processing here....
}

return;
}
NowCan 2003-09-28
  • 打赏
  • 举报
回复
服务注册了没有?(用CreateService)
Caney 2003-09-28
  • 打赏
  • 举报
回复
不能沉,顶
Caney 2003-09-28
  • 打赏
  • 举报
回复
to dongfa(阿东)
我实在不太明白什么原因,能用MSN或EMAIL交流一下吗?
MSN:Caney_flower@hotmail.com
Email:Caney@citiz.net
dongfa 2003-09-28
  • 打赏
  • 举报
回复
用Depends看一下,是不是找不到必须的dll.
Caney 2003-09-28
  • 打赏
  • 举报
回复
ding
Caney 2003-09-28
  • 打赏
  • 举报
回复
为什么不能连接呢,郁闷阿
dongfa 2003-09-28
  • 打赏
  • 举报
回复
The service process could not connect to the service controller.
Caney 2003-09-28
  • 打赏
  • 举报
回复
自己顶一下

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧