使用atl編寫服務程式比較簡單,atl生成嚮導會自動生成,編譯後執行命令:
註冊:aaa.exe /service
解除安裝服務:停止後執行命令aaa.exe /unregserver
可以在run個函式裡面來實現自己的功能
hresult run(int nshowcmd = sw_hide) throw()
}//進入訊息迴圈,不停的處理訊息,可能最後分發到handler去處理,呼叫了onshutdown等函式的。
__super::runmessageloop();
} if (succeeded(hr))
//可以在適當的時候呼叫uninstall函式來解除安裝掉服務
//__super::uninstall();
return hr;
}
退出服務的時候,需要將相應的資源清理掉,重寫onstop和onshutdown
//重寫,服務停止處理
void onstop() throw()
dword dwcode = waitforsingleobject(m_threadhandle, 100000);
if ( wait_timeout == dwcode )
setservicestatus(service_stop_pending);
postthreadmessage(m_dwthreadid, wm_quit, 0, 0);
} //重寫,服務退出處理
void onshutdown() throw()
dword dwcode = waitforsingleobject(m_threadhandle, 100000);
if ( wait_timeout == dwcode )
setservicestatus(service_stop_pending);
postthreadmessage(m_dwthreadid, wm_quit, 0, 0);
}
bool install() throw()
sc_handle hservice = ::createservice(
hscm, m_szservicename, m_szservicename,
service_all_access, service_win32_own_process,
service_auto_start, service_error_normal,
szfilepath, null, null, _t("rpcss\0"), null, null);
if (hservice == null)
::closeservicehandle(hservice);
::closeservicehandle(hscm);
return true; }
else
else
::closeservicehandle(hscm);}}
} return hr;
}
vs2008 建立ATL服務程式bug解決方法
今天使用vs2008 建立atl服務程式遇到以下錯誤 使用的命令 1.atlserver service 2.atlserver unregserver 通過使用logevent 函式定位出錯的地方 服務除錯起來真的麻煩 最後定位錯誤,增加此函式可以在系統日誌中,檢視相應的日誌。在atlbase.h...
ATL學習筆記
1 iobj01 介面定義。2 ccomobjectrootex 實現 了所有介面的公共部分,即 addref 和 release 操作,但是這兩個操作的命名是 internaladdref 和 internalrelease 3 ccomcoclass 定義了兩個靜態方法 ccomcreator ...
ATL學習筆記
整理下 atl 引用計數執行緒模型 atl 臨界區 atl 核心com繼承類之ccomobjectrootex及ccomobjectlock atl 核心com繼承類之idispatchimpl及呼叫 atl com類之啟用 atl 介面對映 atl 執行緒池的使用 atl ccomcreator ...