有nt/win2000下服务程序经验的朋友花几分钟关注一下,等了2天了

Caney 2003-09-29 11:29:08
http://expert.csdn.net/Expert/topic/2310/2310568.xml?temp=.2392542
再顶,我的调试过程如下!
VC环境下设置一个参数,首先启动install(),CreateService()成功建立服务
然后
VC环境中去处参数,启动后调用StartServiceCtrlDispatcher()失败...

难道高手就不能花几分钟时间,指点一下吧?
...全文
49 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxxny 2003-09-30
  • 打赏
  • 举报
回复
接分!!!
Caney 2003-09-29
  • 打赏
  • 举报
回复
GetLastError()=1063
Onega 2003-09-29
  • 打赏
  • 举报
回复
GetLastError看看出了什么错
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;
}


黑豆兄帖出来的和我一样啊,但问题是StartServiceCtrlDispatcher失败SCM怎么会去掉用MyServiceMain呢?
我在MyServiceMain加了断点,但根本不运行进来!

zhaoweidf 2003-09-29
  • 打赏
  • 举报
回复
学习
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;
}

15,471

社区成员

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

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