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

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 厚積薄發 閱讀(322) 評論(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>
            欧美成人一区在线| 另类图片综合电影| 国产精品久久久久aaaa樱花 | 欧美一区二区三区视频在线 | 在线电影院国产精品| 奶水喷射视频一区| 欧美激情第三页| 亚洲一区二区三区激情| 亚洲高清一区二| 亚洲成色777777女色窝| 牛夜精品久久久久久久99黑人| 99这里只有精品| 亚洲午夜国产成人av电影男同| 国产亚洲免费的视频看| 欧美成va人片在线观看| 欧美国产日韩亚洲一区| 性欧美激情精品| 免费观看成人网| 亚洲欧美日韩国产一区二区三区 | 久久久一区二区| 女女同性精品视频| 欧美一区午夜精品| 欧美电影在线免费观看网站| 亚洲综合欧美| 玖玖国产精品视频| 欧美在线免费一级片| 欧美成人一品| 久久露脸国产精品| 欧美色区777第一页| 麻豆精品在线视频| 国产美女精品在线| 亚洲日本aⅴ片在线观看香蕉| 国产一区二区日韩精品| 亚洲日本在线观看| 亚洲国产精彩中文乱码av在线播放 | 国产精品久久午夜夜伦鲁鲁| 免费久久99精品国产自| 国产精品亚洲一区二区三区在线| 欧美激情一区二区三区高清视频| 国产精品综合久久久| 亚洲人成人一区二区三区| 黄色av成人| 亚洲欧美日韩在线播放| 亚洲视频成人| 欧美日韩www| 欧美sm视频| 黄色一区二区在线观看| 亚洲伊人第一页| 在线中文字幕不卡| 欧美激情五月| 亚洲国语精品自产拍在线观看| 韩国av一区二区三区四区| 中文在线资源观看视频网站免费不卡| 亚洲人在线视频| 麻豆精品视频在线| 欧美成人激情视频免费观看| 黑人巨大精品欧美一区二区小视频| 亚洲一二三区视频在线观看| 亚洲视频电影图片偷拍一区| 欧美精品乱码久久久久久按摩| 欧美高清hd18日本| 亚洲欧洲日本专区| 欧美激情精品久久久六区热门| 嫩草国产精品入口| 亚洲欧洲精品成人久久奇米网| 久久久久亚洲综合| 欧美成人国产va精品日本一级| 精品不卡在线| 另类激情亚洲| 亚洲精品国产精品久久清纯直播| 一本色道久久99精品综合| 欧美日本国产一区| 亚洲一区二区三区在线观看视频| 亚洲男人av电影| 国产日韩精品视频一区| 久久xxxx精品视频| 欧美.www| 在线亚洲欧美专区二区| 国产精品久久久久久av福利软件 | 欧美日韩国产a| 一本久久综合亚洲鲁鲁五月天| 亚洲字幕在线观看| 国产一区二区三区久久 | 狠狠色狠狠色综合系列| 久久精品成人| 亚洲人精品午夜| 欧美一区二区播放| 在线免费观看欧美| 欧美日韩国产专区| 午夜精品久久99蜜桃的功能介绍| 另类激情亚洲| 99国产一区| 国产欧美一区二区精品婷婷 | 午夜在线视频观看日韩17c| 久久久久久久综合色一本| 91久久精品www人人做人人爽| 欧美日韩国产区| 先锋a资源在线看亚洲| 欧美国产综合视频| 亚洲欧美精品一区| 91久久在线| 国产视频一区欧美| 欧美日产国产成人免费图片| 亚洲一区三区电影在线观看| 欧美成人精品激情在线观看| 亚洲免费影视| 亚洲欧洲美洲综合色网| 国产精品永久入口久久久| 欧美成人精品福利| 欧美一区二区啪啪| 亚洲伦伦在线| 欧美成人情趣视频| 欧美在线影院| 亚洲午夜一区二区三区| 亚洲国产精品欧美一二99| 国产精品区二区三区日本| 免费欧美在线视频| 久久精品国产77777蜜臀| 在线亚洲一区二区| 亚洲黄色免费网站| 老色批av在线精品| 欧美在线免费观看亚洲| 亚洲无毛电影| 一区二区av在线| 亚洲欧洲日产国产网站| 好吊妞**欧美| 国产欧美一区二区色老头| 欧美午夜性色大片在线观看| 免费在线成人av| 噜噜噜躁狠狠躁狠狠精品视频 | 久久精品日产第一区二区三区 | 裸体女人亚洲精品一区| 欧美一级播放| 欧美一区国产一区| 欧美一区二区三区四区夜夜大片| 中文国产成人精品| 99热这里只有精品8| 日韩视频在线观看国产| 亚洲欧洲精品一区二区三区| 在线视频国内自拍亚洲视频| 一区二区三区在线视频免费观看 | 欧美精品日韩www.p站| 欧美大片国产精品| 欧美理论电影在线播放| 欧美男人的天堂| 欧美日韩一区成人| 国产精品国产馆在线真实露脸 | 久久青青草原一区二区| 久久精品久久综合| 久久一日本道色综合久久| 久久夜色精品国产| 欧美成人精品福利| 欧美日韩亚洲三区| 国产精品嫩草99a| 国产视频欧美| 亚洲激情在线观看| 99国产一区二区三精品乱码| 亚洲视频综合| 欧美一区二区视频网站| 久久只有精品| 亚洲黄色成人网| 这里只有视频精品| 欧美一区日本一区韩国一区| 久久夜色精品国产| 欧美激情乱人伦| 国产精品嫩草久久久久| 国内揄拍国内精品久久| 最新日韩精品| 性色av一区二区三区| 美女国产一区| 一区二区三区日韩在线观看| 小处雏高清一区二区三区 | 欧美在线影院| 欧美黄色网络| 国产色视频一区| 亚洲人屁股眼子交8| 午夜久久久久久| 亚洲第一中文字幕在线观看| 一区二区三区四区国产精品| 久久精品综合| 国产精品久久二区| 亚洲国产mv| 欧美在线视频a| 亚洲日本视频| 久久久久国产一区二区三区| 欧美肉体xxxx裸体137大胆| 伊人成人开心激情综合网| 亚洲社区在线观看| 欧美高清视频一区| 午夜精品久久| 欧美色播在线播放| 亚洲国产日韩欧美| 久久久国产视频91| 一区二区三区.www| 美女精品视频一区| 国产综合视频在线观看| 亚洲在线播放电影| 最新热久久免费视频| 麻豆91精品| 激情综合网激情|