錯誤 1:`DispatchTable` 中 `MyServiceMain` 未解析 — **函數聲明了但未定義實現**。
錯誤 2:`unresolved external symbol _WinMain` — **項目類型設置為 Windows 應用程序 (`/SUBSYSTEM:WINDOWS`)**,鏈接器尋找 `WinMain` 入口,但服務程序入口是 `main` (控制台) 或 `ServiceMain` (服務控制器啟動)。
void WINAPI MyServiceMain(DWORD argc, LPTSTR *argv) {
// 註冊控制處理器
g_hStatusHandle = RegisterServiceCtrlHandler(SERVICE_NAME, MyServiceCtrlHandler);
// 設置狀態 START_PENDING → RUNNING
// 創建工作線程、事件循環
}
void WINAPI MyServiceCtrlHandler(DWORD ctrlCode) {
// 處理 STOP/PAUSE/CONTINUE/INTERROGATE
}
#include
SERVICE_STATUS_HANDLE g_hStatusHandle;
void WINAPI CtrlHandler(DWORD ctrl) { /* 更新狀態 SetServiceStatus */ }
void WINAPI SvcMain(DWORD argc, LPTSTR *argv) {
g_hStatusHandle = RegisterServiceCtrlHandler(TEXT("MySvc"), CtrlHandler);
SetServiceStatus(g_hStatusHandle, &(SERVICE_STATUS){SERVICE_RUNNING});
HANDLE hStop = CreateEvent(NULL, TRUE, FALSE, NULL);
WaitForSingleObject(hStop, INFINITE); // 工作循環
SetServiceStatus(g_hStatusHandle, &(SERVICE_STATUS){SERVICE_STOPPED});
}
int main() {
SERVICE_TABLE_ENTRY dispatch[] = {
{TEXT("MySvc"), SvcMain}, {NULL, NULL}
};
StartServiceCtrlDispatcher(dispatch); // 由 SCM 調用 SvcMain
return 0;
}