關於編寫服務應用程式的一點總結

2021-06-28 15:08:10 字數 1650 閱讀 8401

@1   定義全域性變數。主要為設定服務控制代碼和狀態。

@2  新增init初始化函式。

@3  新增安裝和刪除服務函式。

@4  新增服務主線程函式和控制函式。

@5  在主線程函式裡註冊控制函式和程式執行主體

@6  在 main主函式內註冊新增安裝,刪除,註冊主函式。

大致的主函式:

int apientry winmain(hinstance hinstance,

hinstance hprevinstance,lpstr  lpcmdline,int  ncmdshow),};

if (stricmp(lpcmdline, "/install") == 0)

else if (stricmp(lpcmdline, "/uninstall") == 0)

else

}return 0;

}建立服務函式為:

sc_handle createservice(

sc_handle hscmanager, //服務控制管理程式維護的登記資料庫的控制代碼,由系統函式openscmanager 返回

lpctstr lpservicename, //以null 結尾的服務名,用於建立登記資料庫中的關鍵字

lpctstr lpdisplayname, //以null 結尾的服務名,用於使用者介面標識服務

dword dwdesiredaccess, //指定服務返回型別

dword dwservicetype, //指定服務型別

dword dwstarttype, //指定何時啟動服務

dword dwerrorcontrol, //指定服務啟動失敗的嚴重程度

lpctstr lpbinarypathname, //指定服務程式二進位制檔案的路徑

lpctstr lploadordergroup, //指定順序裝入的服務組名

lpdword lpdwtagid, //忽略,null

lpctstr lpdependencies, //指定啟動該服務前必須先啟動的服務或服務組

lpctstr lpservicestartname, //以null 結尾的字串,指定服務帳號。如是null,則表示使用localsystem 帳號

lpctstr lppassword //以null 結尾的字串,指定對應的口令。為null表示無口令。但使用localsystem時填null

開啟服務函式為:

sc_handle winapi openservice(

_in_  sc_handle hscmanager,

_in_  lpctstr lpservicename,

_in_  dword dwdesiredaccess

);

具體詳略檢視msdn文件。

停止服務函式為:

bool winapi controlservice(

_in_   sc_handle hservice,

_in_   dword dwcontrol,

_out_  lpservice_status lpservicestatus

);刪除服務函式為:

bool winapi deleteservice(

_in_  sc_handle hservice

);

MVS編寫MFC應用程式知識點總結

hinstance和hwnd的區別 二者都是表示控制代碼,前者是應用程式的控制代碼,後者是視窗的控制代碼。程序中的每個dll模組被全域性唯一的32位元組的hinstance控制代碼標識,只有在特定的程序內部有效,控制代碼代表了dll模組在虛擬空間中的其實位址。在win32中,hinstance和hm...

關於MongoDB的一點總結

今天推送引擎註冊在dubbo上的服務總是自動會關閉掉,查了一下發現是system.in.read 的原因,導致自動關閉。但是還是不太明白,別人執行spring的時候,只要啟動以後就不會自動關閉,而我的spring剛啟動就關閉了,找了半天都沒有解決,沒辦法,只好用了最笨的方法 while true 而...

關於演算法的一點總結

分解問題的角度 fix 某一維度,嘗試另一維度上的所有可能 a.可能是array的 i,j pointers,b.可能是矩形的長與寬,c.可能是tree的每乙個subtree,d.可能是情景題的每一對pair 求所有解的,暴力上backtracking吧 如果問最短 最少的,先想bfs dp這對好 ...