我想知道如何調試C.there Windows服務的啓動代碼有幾個類似這樣的問題,但在C#中,但他們不是我所需要的。 到目前爲止,我只能附加到進程調試。現在我想調試main()函數,該怎麼做?越詳細越好。
非常感謝。
我的代碼如下。
主要功能:
void main()
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "MemoryStatus";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; //ServiceMain
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
StartServiceCtrlDispatcher(ServiceTable);
}
ServiceMain函數:
void ServiceMain(int argc, char** argv)
{
//...some codes....
hStatus = RegisterServiceCtrlHandler("MemoryStatus",(LPHANDLER_FUNCTION)ControlHandler);
//...some codes....
//the worker loop of a service
while(ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
char buffer[10];
sprintf(buffer,"login...");
int result = WriteToLog(buffer);
if (result)
{
ReportStatus(SERVICE_STOPPED,-1);
return;
}
Sleep(SLEEP_TIME);
}
return;
}
和控制手柄功能:
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
WriteToLog("Monitoring stopped.");
//...Report Status to SCM code....
return;
case SERVICE_CONTROL_SHUTDOWN:
WriteToLog("Monitoring stopped.");
//...Report Status to SCM code....
return;
default:
break;
}
//...Report Status to SCM code....
return;
}
使用GFlags.exe工具爲您設置和取消設置Windows註冊表更方便。這很快,並允許您指定所需的一切。只需啓動它,單擊「圖像文件」選項卡,在圖像文本框中鍵入圖像的名稱,點擊TAB,然後進入調試器行。檢查調試器併爲調試器輸入命令行,單擊確定。 未設置很容易。通過調試器取消選中複選框。 – StarPilot
從這個答案鏈接的文章是一個偉大的資產。我想補充說,在更改ServicesPipeTimeout註冊表值以使新值生效後,您必須重新啓動系統。 –