MFC 服務程式在「應用程式模式」下動態載入 DLL (LoadLibrary/GetProcAddress) 正常;改為「服務模式」 (Windows Service) 運行時,服務啟動後隨即停止。
MessageBox、CreateWindow、GetDC(NULL) 等在 Session 0 會失敗或卡住。C:\Windows\System32,相對路徑 LoadLibrary("MyDll.dll") 找不到。需使用完整路徑或 SetDllDirectory。LocalSystem 執行,若 DLL 存取網路資源、使用者配置檔、特定登錄機碼,可能遭拒絕。DllMain 執行複雜邏輯、鎖、載入其他 DLL,導致死結或例外。LoadLibrary 失敗返回 ERROR_BAD_EXE_FORMAT (193)。DebugBreak() 或寫入詳細 Log 到檔案 (非 UI)。TCHAR szPath[MAX_PATH];
GetModuleFileName(NULL, szPath, MAX_PATH);
PathRemoveFileSpec(szPath);
PathAppend(szPath, _T("MyDll.dll"));
HMODULE hMod = LoadLibrary(szPath);
GetLastError(),對照錯誤碼處理。服務模式下的環境差異是導致 DLL 行為異常的主因,逐項排查路徑、權限、相依性、Session 0 限制即可定位問題。