前段時間學習windows程式設計,剛好學到win32 service,於是寫了兩個簡單的類:baseservice和servicectrl。雖然功能比較簡單,但是也能適用於大多數情況。下面介紹一下簡單用法,如果你剛好需要寫一些簡單的服務程式,這兩個類也許能派上用場:
1. baseservice
baseservice.h 1
#ifndef base_service_h2
#define base_service_h3
4class
baseservice
10bool parsestandardargs(
intargc,
char*
argv);11
bool isinstalled();12
bool install();13
bool uninstall();14
bool start();
15private
:16virtual
void
run() =0
;17virtual bool oninitialize()
18virtual
void
onstop() {}
19virtual
void
onpause() {}
20virtual
void
oncontinue() {}
21virtual
void
oninterrogate() {}
22virtual
void
onshutdown() {}
23virtual
void
onusercontrol(dword dwcontrol) {}24
...25
};26
27#endif
/*base_service_h*/
要實現自己的服務類只需從baseservice繼承並且override相關的virtual函式即可,下面示範乙個beepservice類,該服務只是簡單地每隔2秒beep一下,為了簡單所有**均放在.h檔案中:
beepservice.h 1
#ifndef beep_service_h2
#define beep_service_h3
4#include
"baseservice.h"
5
6class
beepservice :
public
baseservice 12
13virtual
void
onstop()
14virtual
void
onpause()
15virtual
void
oncontinue()
16virtual
void
run() 23
}24private
:25volatile
bool m_bpaused;
26volatile
bool m_brunning;27
};28
29#endif
/*beep_service_h*/
通常來說只須要override上面的4個virtual函式就ok了:
在run()中進行實際的工作,onstop(),onpause(),oncontinue()則是為了響應service control manager的控制。
test.cpp 1
#include
<
windows.h
>
2#include
<
tchar.h
>
3#include
<
stdio.h
>
4#include
"beepservice.h"
5
6int
main(
intargc,
char*
argv)
else
17 }18
return0
;19}
假設編譯後生成的exe檔案為beep.exe,則在命令列中可以如下使用:
(1). beep -i 安裝service(安裝以後系統執行時會自動啟動)
(2). beep -u 解除安裝service(如果service正在執行,則先停止service再解除安裝)
baseserviced 的parsestandardargs正是用來解析上述兩個命令。
2. servicectrl
雖然windows自帶的service control manager可以控**務程式,但是很多時候我們都需要用**控制,這就用到servicectrl類,該類的介面如下:
servicectrl.h 1
#ifndef service_ctrl_h2
#define service_ctrl_h3
4class
servicectrl ;17
18#endif
/*service_ctrl_h*/
介面比較直觀沒什麼好說的,看下面的示例**:
test.cpp
1#include
<
windows.h
>
2#include
<
tchar.h
>
3#include
<
stdio.h
>
4#include
<
exception
>
5#include
"beepservice.h"
6#include
"servicectrl.h"
7
8int
main(
intargc,
char*
argv)
else
27}
catch
(std::exception &
e) 30return0
;31}
源**:
php自動執行 win32service功能
什麼 windows服務 windows 服務 即,以前的 nt 服務 使您能夠建立在它們自己的 windows 會話中可長時間執行的可執行應用程式 這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何使用者介面。這使服務非常適合在伺服器上使用,或任何時候,為了不影響在同一臺計算 機...
簡單的WIN32視窗封裝
封裝視窗物件。注意。有些命名我是直接複製win32api的,偷懶了 本來是想直接用虛函式來處理訊息的,但是訊息很多,寫的會很吃力,所以採用類似mfc的訊息對映,現在記憶體是很富裕的,不用擔心虛函式表會占用大量記憶體,個人建議是採用虛函式的,我這裡偷偷懶。該類主要作用 訊息處理函式呼叫該類的靜態函式w...
Win32中簡單實現串列埠通訊
宣告 本文的串列埠通訊是主機向從機傳送資料。step 1 handle m hcomm createfile com3 串列埠名,根據實際情況而定 generic read generic write,0,null,open existing,0 if invalid handle value m ...