亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我把服務主程序的代碼貼出來,求指導://服務入口點函數

我把服務主程序的代碼貼出來,求指導://服務入口點函數

慕妹3146593 2022-11-04 17:13:00
void WINAPI Service_Main(DWORD dwArgc, LPTSTR *lpszArgv){//初始化 SERVICE_STATUS 結構中的成員ssStatus.dwServiceType=SERVICE_WIN32_OWN_PROCESS;ssStatus.dwControlsAccepted=SERVICE_ACCEPT_STOP;ssStatus.dwCurrentState= SERVICE_STOPPED;ssStatus.dwServiceSpecificExitCode=0;ssStatus.dwCheckPoint=0;ssStatus.dwWin32ExitCode=0;ssStatus.dwWaitHint=0;//注冊服務控制處理函數sshStatusHandle=RegisterServiceCtrlHandler(TEXT(SZSERVICENAME),Service_Ctrl);//如果注冊失敗if(!sshStatusHandle){goto cleanup;return;}//更新服務狀態if(!ReportStatusToSCMgr(SERVICE_START_PENDING,//服務狀態,The service is starting.NO_ERROR, //退出碼3000)) //等待時間goto cleanup; //更新服務狀態失敗則轉向 cleanupServiceStart(dwArgc,lpszArgv);//具體的服務程序return;cleanup://把服務狀態更新為 SERVICE_STOPPED,并退出。if(sshStatusHandle)(void)ReportStatusToSCMgr(SERVICE_STOPPED,dwErr,0);}請問哪里不對呢???
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

// NT服務程序的入口函數
void WINAPI ServiceMain(DWORD argc, LPSTR *argv)
{
//DWORD status;
//DWORD specificError;
// 注冊服務控制
SKServer*NTSObj;
NTSObj = (SKServer *)SKServerID;
ServiceStatusHandle = RegisterServiceCtrlHandlerA(NTSObj->NTSName, ServiceCtrlHandler);
ServiceStatus.dwServiceType= SERVICE_WIN32_OWN_PROCESS;
ServiceStatus.dwCurrentState= SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted= SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode= 0;
ServiceStatus.dwServiceSpecificExitCode= 0;
ServiceStatus.dwCheckPoint= 0;
ServiceStatus.dwWaitHint= 0;
SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
if(NTSObj->OnStart!=NULL){
NTSObj->OnStart();
}
ServiceStatus.dwCurrentState= SERVICE_RUNNING;
SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
NTSObj->IsExit = FALSE;
while(!NTSObj->IsExit){
Sleep(100);
}
return;
}
// NT服務程序的服務控制處理函數
void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
SKServer*NTSObj;
NTSObj = (SKServer *)SKServerID;
switch(Opcode){
case SERVICE_CONTROL_PAUSE:
if(NTSObj->OnPause!=NULL){
NTSObj->OnPause();
}
ServiceStatus.dwCurrentState = SERVICE_PAUSED;
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);
break;

case SERVICE_CONTROL_CONTINUE:
if(NTSObj->OnStart!=NULL){
NTSObj->OnStart();
}
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);
break;

case SERVICE_CONTROL_STOP:
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
SetServiceStatus (ServiceStatusHandle,&ServiceStatus);
if(NTSObj->OnStop!=NULL){
NTSObj->OnStop();
}
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);
NTSObj->IsExit=TRUE;
break;

case SERVICE_CONTROL_INTERROGATE:
break;
}
return;
}


查看完整回答
反對 回復 2022-11-08
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

這個問題好復雜。
我也試過錯誤1053,后來發現是因為dll的路徑放錯了。因為系統服務的工作路徑在system32。

查看完整回答
反對 回復 2022-11-08
  • 2 回答
  • 0 關注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號