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

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>
            久久只有精品| 久久视频在线看| 亚洲精品一区二区三区樱花| 久久久综合免费视频| 一区二区在线不卡| 久久亚洲欧美| 免费日韩成人| 亚洲视频在线观看一区| 亚洲视频综合| 一区二区三区在线观看欧美| 女女同性精品视频| 欧美精品七区| 欧美一级片一区| 久久视频在线视频| 亚洲午夜激情网页| 欧美一二三区在线观看| 亚洲高清久久网| 一区二区动漫| 伊伊综合在线| 夜夜爽av福利精品导航| 国产真实久久| 亚洲日韩欧美视频| 国产麻豆午夜三级精品| 欧美大片网址| 欧美视频在线观看一区| 久久一二三四| 欧美午夜电影在线| 美日韩免费视频| 国产精品国产成人国产三级| 美国十次成人| 国产精品成人v| 欧美大片在线观看一区二区| 国产精品亚洲а∨天堂免在线| 欧美不卡福利| 国产精品三级视频| 亚洲国产婷婷| 永久免费视频成人| 亚洲欧美另类中文字幕| 亚洲精品免费在线播放| 欧美在线观看网站| 亚洲一区二区三区乱码aⅴ| 久久婷婷久久| 欧美在线啊v| 欧美视频在线观看| 亚洲欧洲偷拍精品| 亚洲激情成人| 久久久久国产精品www| 亚洲伊人久久综合| 欧美精品一卡二卡| 欧美韩日精品| 一区二区亚洲精品| 欧美自拍丝袜亚洲| 午夜日韩在线| 欧美午夜免费电影| 99视频有精品| 亚洲日本理论电影| 老牛国产精品一区的观看方式| 久久国产精品亚洲va麻豆| 欧美手机在线| 一本大道久久a久久综合婷婷| 亚洲日本成人女熟在线观看| 久久久午夜电影| 久久中文在线| 在线观看一区| 美女精品视频一区| 欧美jizzhd精品欧美巨大免费| 激情综合在线| 久久综合色播五月| 亚洲第一偷拍| 亚洲人成在线观看网站高清| 蜜臀91精品一区二区三区| 欧美刺激午夜性久久久久久久| 在线国产欧美| 欧美成年人在线观看| 亚洲高清久久网| 99精品国产99久久久久久福利| 欧美久色视频| 亚洲天堂成人在线视频| 午夜精品久久久99热福利| 国产欧美日韩在线视频| 久久se精品一区二区| 免费毛片一区二区三区久久久| 一区二区三区在线看| 欧美夫妇交换俱乐部在线观看| 亚洲破处大片| 亚洲欧美精品在线| 国产在线欧美日韩| 欧美α欧美αv大片| 亚洲美女黄网| 久久精品九九| 亚洲精品美女久久7777777| 欧美日韩一卡| 欧美影院视频| 亚洲国产欧美日韩精品| 中文国产成人精品| 国模精品一区二区三区色天香| 久久久久一区二区三区| 亚洲精品美女久久久久| 午夜亚洲伦理| 亚洲国产精品一区二区第四页av | 亚洲欧美综合精品久久成人| 欧美偷拍另类| 久久精品国产久精国产思思| 女女同性女同一区二区三区91| 99国产精品久久久久老师| 国产精品成人一区二区三区夜夜夜| 欧美一区二区精品| 亚洲片在线资源| 久久久久天天天天| 一片黄亚洲嫩模| 国产主播喷水一区二区| 欧美人体xx| 久久久久综合网| 在线亚洲激情| 亚洲电影在线免费观看| 欧美一站二站| 一区二区三区四区五区精品视频| 国产美女精品在线| 欧美视频日韩视频| 麻豆精品91| 欧美一区亚洲一区| 中文在线资源观看网站视频免费不卡| 裸体歌舞表演一区二区| 亚洲综合欧美| 99国产精品久久久| 亚洲欧洲另类国产综合| 国内一区二区在线视频观看 | 欧美自拍偷拍| 一区二区日韩免费看| 欧美黄色一区| 免费欧美在线视频| 久久久久国产一区二区| 亚洲欧美日韩视频二区| 一本到12不卡视频在线dvd| 一区二区视频免费完整版观看| 国产伦精品一区二区三| 欧美偷拍一区二区| 欧美日韩亚洲一区二| 免费视频亚洲| 欧美不卡视频| 美女国产一区| 免费毛片一区二区三区久久久| 久久久精品999| 久久爱www.| 久久久久久穴| 美女久久一区| 欧美成人69| 欧美国产一区在线| 欧美精品一区二区在线观看| 欧美电影在线播放| 欧美精品手机在线| 欧美日韩精品免费在线观看视频| 欧美全黄视频| 欧美四级伦理在线| 国产精品视频内| 国产婷婷一区二区| 狠狠色综合色区| 亚洲国产精品久久91精品| 亚洲国产欧美不卡在线观看| 亚洲高清免费在线| 夜夜嗨av色一区二区不卡| 亚洲深夜福利在线| 欧美一级午夜免费电影| 久久久精品动漫| 欧美freesex8一10精品| 亚洲国产欧美一区| 中日韩美女免费视频网站在线观看| 亚洲香蕉成视频在线观看| 亚洲专区在线| 久久久久久九九九九| 女人色偷偷aa久久天堂| 欧美日韩调教| 韩国一区二区三区在线观看| 亚洲国产精品一区二区www| 99精品欧美一区| 久久成人人人人精品欧| 欧美成人精品h版在线观看| 亚洲精品美女91| 欧美一级久久久久久久大片| 老鸭窝毛片一区二区三区| 欧美日韩综合一区| 国模大胆一区二区三区| av成人免费观看| 久久三级福利| 日韩午夜中文字幕| 久久福利电影| 欧美日韩一区三区四区| 国外成人在线视频| 中文在线资源观看网站视频免费不卡| 久久精品国产77777蜜臀 | 一本不卡影院| 久久久久久国产精品mv| 亚洲精品国精品久久99热| 先锋资源久久| 欧美日韩综合视频| 亚洲国产精品成人综合色在线婷婷 | 久久久女女女女999久久| 欧美日韩午夜| 亚洲国产小视频| 久久久久久久综合日本|