VS 模板生成的 ATL 服務專案,Debug/Release 版均通過 Service.exe -Service 註冊後,服務管理器啟動報錯:「服務無法啟動」。事件查看器無異常。Debug 版通過 RegServer 註冊後運行即退出。
_tWinMain → Run() → PreMessageLoop()PreMessageLoop 返回 S_FALSE → RunMessageLoop() 不執行 → 進程立即退出PreMessageLoop 內部調用 RegisterClassObjects(CLSCTX_LOCAL_SERVER, ...)S_FALSEATL 內部通過此宏判斷是否跳過 COM 註冊:
// 方式一:stdafx.h 或專案屬性 預處理器定義
#define _ATL_NO_COM_SUPPORT
// 方式二:專案屬性 → C/C++ → Preprocessor → Preprocessor Definitions 添加
_ATL_NO_COM_SUPPORT

定義後 PreMessageLoop 跳過 RegisterClassObjects,直接返回 S_OK,服務正常進入消息循環。