青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

后臺服務程序開發模式(一)

轉自http://www.7880.com/Info/Article-5a8eada0.html

一直感覺
VC++太復雜了,但昨天看了汪蒲陽編著的因特網應用編程,其中寫到后臺服務程序的編寫,論述的非常詳細,而且邏輯清晰,看了之后感覺明白不少,故拿來與需要之人共享,并更正了原程序的一些錯誤,補充了一些材料。另外還有一種用C++編寫后臺服務程序的思路(不算.NET上服務程序開發模型),以后整理好了再發上來。

 

2000/XP等基于NT 的操作系統中,有一個服務管理器,它管理的后臺進程被稱為 service。

服務是一種應用程序類型,它在后臺運行,與 UNIX 后臺應用程序類似。服務應用程序通常可以

在本地和通過網絡為用戶提供一些功能,例如客戶端/服務器應用程序、Web 服務器、數據庫服

務器以及其他基于服務器的應用程序。

    后臺服務 程序是在后臺悄悄運行的。我們通過將自己的程序登記為服務,可以使自己的程序不出現

在任務管理器中,并且隨系統啟動而最先運行,隨系統關閉而最后停止。

    

     服務控制管理器是一個RPC 服務器,它顯露了一組應用編程接口,程序員可以方便的編寫程序來配置

服務和控制遠程服務器中服務程序。

     服務程序通常編寫成控制臺類型的應用程序,總的來說,一個遵守服務控制管理程序接口要求的程序

包含下面三個函數:

1。服務程序主函數(main):調用系統函數 StartServiceCtrlDispatcher 連接程序主線程到服務控制管理程序。

2。服務入口點函數(ServiceMain):執行服務初始化任務,同時執行多個服務的服務進程有多個服務入口函數。

3。控制服務處理程序函數(Handler):在服務程序收到控制請求時由控制分發線程引用。(此處是Service_Ctrl)。

 另外在系統運行此服務之前需要安裝登記服務程序:installService 函數。刪除服務程序則需要先刪除服務安裝登記:removeService 函數。

 

服務類型:

類型

說明

SERVICE_FILE_SYSTEM_DRIVER=2

文件系統驅動服務。

SERVICE_KERNEL_DRIVER=1

驅動服務。

SERVICE_WIN32_OWN_PROCESS=16

獨占一個進程的服務。

SERVICE_WIN32_SHARE_PROCESS=32

與其他服務共享一個進程的服務。

新建WIN32控制臺程序, 其源文件名為service.cpp 。我用的開發工具是VC++.NET。

 

1.服務程序主函數

    服務控制管理程序啟動服務程序后,等待服務程序主函數調用系統函StartServiceCtrlDispatcher。一個SERVICE_WIN32_OWN_PROCESS 類型的服務應該立即調用 StartServiceCtrlDispatcher 函數,可以在服務啟動后讓服務入口點函數完成初始化工作。對于 SERVICE_WIN32_OWN_PROCESS 類型的服務和程序中所有服務共同的初始化工作可以在主函數中完成,但不要超過30秒。否則必須建立另外的線程完成這些共同的初始化工作,從而保證服務程序主函數能及時地調用 StartServiceCtrlDispatcher 函數。

 

 

主函數處理了三中命令行參數:- install,- remove,- debug,分別用于安裝,刪除和調試服務程序。如果不帶參數運行,則認為是服務控制管理出現啟動該服務程序。參數不正確則給出提示信息。

 

StartServiceCtrlDispatcher 函數負責把程序主線程連接到服務控制管理程序。具體描述如下:

BOOL StartServiceCtrlDispatcher(

  const LPSERVICE_TABLE_ENTRY lpServiceTable);

lpServiceStartTable 指向 SERVICE_TABLE_ENTRY 結構類型的數組,他包含了調用進程所提供的每個服務的入口函數和字符串名。表中的最后一個元素必須為 NULL,指明入口表結束。SERVICE_TABLE_ENTRY 結構具體描述如下:

 

typedef struct _SERVICE_TABLE_ENTRY {  LPTSTR lpServiceName;  LPSERVICE_MAIN_FUNCTION lpServiceProc;

} SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY;

 

lpServiceName 是一個以 NULL 結尾的字符串,標識服務名。如果是 SERVICE_WIN32_OWN_PROCESS 類型的服務,這個字符串會被忽略。

lpServiceProc 指向服務入口點函數。

 

 

//服務程序主函數。

#include "stdafx.h"

#include "Windows.h"

#define SZAPPNAME      "serverSample"     //服務程序名

#define SZSERVICENAME  "serviceSample"    //標識服務的內部名

 

//內部變量

bool                   bDebugServer=false;

SERVICE_STATUS              ssStatus;

SERVICE_STATUS_HANDLE  sshStatusHandle;

DWORD                       dwErr=0;

TCHAR                       szErr[256];

 

//下面的函數由程序實現

void  WINAPI  Service_Main(DWORD dwArgc, LPTSTR *lpszArgv);

void  WINAPI  Service_Ctrl(DWORD dwCtrlCode);

void installService();

void removeService();

void debugService(int argc,char** argv);

bool ReportStatusToSCMgr(DWORD dwCurrentState,DWORD dwWin32ExitCode,DWORD dwWaitHint);

void AddToMessageLog(LPTSTR lpszMsg);

 

int _tmain(int argc, _TCHAR* argv[])

{   

     SERVICE_TABLE_ENTRY dispatchTable[]=

     {

         {TEXT(SZSERVICENAME),(LPSERVICE_MAIN_FUNCTION)Service_Main},

         { NULL,NULL}

     };

     if((argc>1)&&((*argv[1]=='-')||(argv[1]=="/")))

     {

         if(_stricmp("install",argv[1]+1)==0)

         {

              installService();

         }

         else if(_stricmp("remove",argv[1]+1)==0)

         {

              removeService();

         }

         else if(_stricmp("debug",argv[1]+1)==0)

         {

              bDebugServer=true;

              debugService(argc,argv);

         }

         else

         {        //如果未能和上面的如何參數匹配,則可能是服務控制管理程序來啟動該程序。立即調用

                   //StartServiceCtrlDispatcher 函數。

              printf("%s - install to install the service \n",SZAPPNAME);

              printf("%s - remove to remove the service \n",SZAPPNAME);

              printf("%s - debug to debug the service \n",SZAPPNAME);

              printf("\n StartServiceCtrlDispatcher being called.\n");

              printf("This may take several seconds.Please wait.\n");

              if(!StartServiceCtrlDispatcher(dispatchTable))

                   AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed."));

              else

                   AddToMessageLog(TEXT("StartServiceCtrlDispatcher OK."));

         }

         exit(0);

     }

     return 0;

}

posted on 2011-06-17 14:36 厚積薄發 閱讀(321) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产久精国产一老狼| 亚洲一区二区黄| 亚洲第一精品夜夜躁人人爽| 国产精品亚洲第一区在线暖暖韩国| 欧美日韩中文| 欧美午夜精品| 国产精品爽爽ⅴa在线观看| 亚洲欧美日韩电影| 亚洲尤物精选| 久久精品国产成人| 欧美在线视频日韩| 99re国产精品| 亚洲性人人天天夜夜摸| 亚洲黄色一区| 亚洲午夜精品| 国产精品丝袜xxxxxxx| 国产精品视频在线观看| 国产午夜久久久久| 亚洲经典一区| 香蕉久久精品日日躁夜夜躁| 久久漫画官网| 亚洲精品欧美在线| 久久爱www久久做| 欧美日本不卡视频| 欧美一区二区三区日韩| 欧美电影在线观看完整版| 国产精品yjizz| 亚洲第一精品电影| 亚洲视屏在线播放| 美女精品视频一区| 亚洲夜间福利| 欧美freesex交免费视频| 国产精品拍天天在线| 亚洲成色www久久网站| 亚洲图片你懂的| 欧美成黄导航| 欧美一区二区三区在线免费观看| 欧美国产1区2区| 影音先锋日韩有码| 欧美一区在线直播| 在线视频你懂得一区二区三区| 免费国产一区二区| 国产色综合网| 国产日本精品| 亚洲综合欧美日韩| 亚洲激情黄色| 亚洲欧美韩国| 国产精品免费一区二区三区在线观看 | 久久精品视频免费| 国产精品wwwwww| 亚洲人体偷拍| 欧美xart系列高清| 欧美一级视频| 久久精品视频一| 亚洲综合色网站| 国产精品久久午夜| 亚洲一区影院| 一区二区精品在线观看| 日韩视频一区二区| 美女视频一区免费观看| 黄色一区二区三区| 久久亚洲综合网| 欧美亚洲在线观看| 国产精品一区毛片| 久久久爽爽爽美女图片| 尤妮丝一区二区裸体视频| 国产女人18毛片水18精品| 国产精品99久久久久久人| 最新日韩欧美| 亚洲午夜激情免费视频| 99在线精品观看| 久久免费黄色| 亚洲成人资源| 亚洲国产一区视频| 欧美全黄视频| 亚洲自啪免费| 亚洲自拍偷拍视频| 国产一区清纯| 欧美高清在线一区二区| 欧美激情久久久| 欧美精品九九| 香蕉av777xxx色综合一区| 午夜精品美女久久久久av福利| 国产一区二区无遮挡| 欧美成人中文| 性欧美18~19sex高清播放| 蜜桃久久精品乱码一区二区| 欧美成人精品三级在线观看 | 一区二区日韩| 亚洲欧美国产日韩天堂区| 国产日韩在线一区| 免费欧美在线视频| 欧美国产日本韩| 亚洲欧美日韩中文视频| 久久精品亚洲一区二区| 一本色道婷婷久久欧美| 午夜久久久久久| 亚洲人成网站精品片在线观看| 99在线热播精品免费99热| 亚洲视频专区在线| 国产三区二区一区久久| 亚洲激情综合| 国产午夜亚洲精品理论片色戒| 欧美成人在线免费视频| 国产精品网站在线观看| 欧美激情一级片一区二区| 免费短视频成人日韩| 性欧美超级视频| 一区二区三区国产| 久久精品女人| 亚洲一区二区三区精品动漫| 久久久久久久久久久久久久一区| 亚洲午夜电影在线观看| 欧美凹凸一区二区三区视频| 午夜在线成人av| 欧美日韩在线高清| 亚洲福利视频专区| 黄色日韩网站| 亚洲网友自拍| 在线综合+亚洲+欧美中文字幕| 久久综合狠狠综合久久综青草| 亚洲男人的天堂在线aⅴ视频| 欧美国产日韩精品免费观看| 国产美女诱惑一区二区| 亚洲伦理中文字幕| 亚洲国产高清aⅴ视频| 麻豆freexxxx性91精品| 久久久久9999亚洲精品| 久久成人免费网| 欧美在线播放| 9久re热视频在线精品| 欧美一区二区三区免费在线看| 亚洲另类自拍| 免费日韩av| 欧美激情亚洲激情| 狠狠色狠色综合曰曰| 亚洲免费视频网站| 亚洲一级高清| 欧美激情一二三区| 欧美1级日本1级| 国产一级一区二区| 亚洲伊人第一页| 欧美激情第一页xxx| 欧美丰满高潮xxxx喷水动漫| 国产午夜久久| 性欧美暴力猛交69hd| 欧美亚洲综合久久| 国产精品久久久999| 在线一区二区日韩| 免费欧美日韩| 亚洲人精品午夜在线观看| 欧美大片一区二区三区| 91久久精品久久国产性色也91| 亚洲国产一区二区三区青草影视| 久久精品国产免费看久久精品| 久久女同精品一区二区| 在线观看视频一区| 玖玖玖国产精品| 亚洲精品视频免费| 亚洲图片欧美午夜| 国产精品视频免费| 性久久久久久久久| 午夜精品视频| 永久免费视频成人| 欧美激情久久久| 中文一区字幕| 在线免费精品视频| 欧美伦理影院| 亚洲欧美日韩一区在线| 免费亚洲一区二区| 亚洲视频一区二区| 国产精品一区在线播放| 久久久久久久综合色一本| 91久久精品国产91性色tv| 欧美高清日韩| 欧美一区二区成人6969| 亚洲福利在线观看| 欧美亚男人的天堂| 免费的成人av| 亚洲综合999| 91久久久久久| 久久人体大胆视频| 亚洲一区二区三区在线| 狠狠久久亚洲欧美| 欧美日韩在线播放| 美女久久一区| 亚洲欧美国产高清va在线播| 欧美成人资源网| 久久精品二区亚洲w码| 国产一区二区剧情av在线| 欧美激情精品久久久久久免费印度| 香蕉久久夜色精品| 免费国产一区二区| 亚洲欧美日韩一区二区在线 | 久久成人一区二区| 欧美成人午夜免费视在线看片| 国产精品ⅴa在线观看h| 亚洲日本成人网| 欧美成人激情在线| 亚洲专区在线视频|