ATL服務程式

2021-06-18 23:12:09 字數 1546 閱讀 9716

使用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 ...