VC编写Windows服务程序
第8章 VC创建的windows程序

VC创建的windows程序 VC创建的windows程序 创建的windows
§1. Windows应用程序 §2. MFC创建的Windows程序
重点:面向对象程序设计的方法、Windows程序结构。 难点: API 法VC的程序设计
VC面向对象的程序设计方法 面向对象的程序设计方法: 一. VC面向对象的程序设计方法: API法 MFC法 1. Winsows API法 2. MFC法 WINDOWS程序处理机制 二. WINDOWS程序处理机制
window 随 机 事 件 消 息 队 列 消息代码 取消息 处理消息 应用程序 窗口处理
三.VC下的文件类型 .VC下的文件类型
.cpp .h .def .rc .dsw VC语言源文件 头文件 定义文件 资源文件 项目工作区文件
四.VC程序中常用的数据结构 .VC程序中常用的数据结构
MSG: 包含了消息的全部信息。 WNDCLASS:包含了一个窗口类的全部信息。 POINT: 定义了屏幕上或窗口中的一个点的X,Y坐标。 RECT: 定义了一个矩形区域。
Registerclass() CreateWindow() ShowWindow() UpdateWindow() GetMessage() DispatchMessage()
例:8.1用API法创建一个Windows窗口程序
பைடு நூலகம்
一.MFC的基本概念 .MFC的基本概念 1. MFC MFC:微软的基本类库,封装了常用的类及成员函数, 便于用户编程调用。 2. MFC中的CWinApp类:它是启动/运行程序、实现消息传 CWinApp类 CWinApp 递等操作的封装。它包含了WinMain()、消息循环等处理, 控制程序的运行。 3. MFC中的CWinThread类:封装了程序界面线程的类。 CWinThread类 CWinThread 4. MFC中的CFramWnd类:包含了对窗口等文档数据的定义, CFramWnd类 CFramWnd 决定窗口的显示形式。 5. Afx 函数名() 函数名() ():将函数说明成全局的MFC函数。 6. afxwin.h afxwin.h:包含所有MFC中的类、函数及变量的头文件。 二.用MFC工程向导AppWizard创建VC应用程序 工程向导AppWizard创建VC 用MFC工程向导AppWizard创建VC应用程序 例8.3:用MFC创建Welcome 程序。 目的: 学习创建过程 End 分析程序结构
用c#创建windows服务

服务的暂停和恢复
01
示例代码
02
```csharp
03
public partial class MyService : ServiceBase
服务的暂停和恢复
{
private ServiceController serviceController;
服务的暂停和恢复
• public MyService()
06
示例:创建一个简单的Windows服务
创建服务项目
创建Windows服务项目
在Visual Studio中创建一个新的Windows服务项目,选择C#语言和适当的框架版本。
添加服务类
在项目中添加一个新的类,继承自`System.ServiceProcess.ServiceBase`类,并实现 必要的服务逻辑。
03
C#具有强大的异常处理和日志 记录功能,可以方便地调试和 排查问题。
02
C#创建Windows服务的步骤
创建Windows服务项目
创建Windows服务项目
在Visual Studio中创建一个新的Windows服务项目,选择“文件”->“新建”->“项目”,然后选择 “Windows服务”模板。
03
服务启动和停止事件处理
}
protected override void OnStart(string[] args)
服务启动和停止事件处理
01 02 03
{ // 服务启动时执行的代码 serviceController.Start();
服务启动和停止事件处理
}
protected oveHale Waihona Puke ride void OnStop()
用 VC++建立 Windows 服务程序

用VC++建立Windows 服务程序本文主要介绍了OpenSCManager、CreateService、OpenService、ControlService、DeleteService、RegisterServiceCtrlHandler、SetServiceStatus、StartServiceCtrlDispatcher等操作服务程序的主要几个API的用法,具体的函数参数大家可以查阅MSDN。
为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。
下面就跟着我一步一步地教你怎么去创建一个服务应用程序吧。
一、建立Win32 Application 应用程序(当然你也可以建立其它的应用程序,但服务一般是没有用户界面的),并命名为ServiceTest。
二、定义全局函数变量。
这里主要是设置服务句柄和状态。
print?01.BOOL IsInstalled();02.BOOL Install();03.BOOL Uninstall();04.void LogEvent(LPCTSTR pszFormat, ...);05.void WINAPI ServiceMain();06.void WINAPI ServiceStrl(DWORD dwOpcode);07.08.TCHAR szServiceName[] = _T("ServiceTest");09.BOOL bInstall;10.SERVICE_STATUS_HANDLE hServiceStatus;11.SERVICE_STATUS status;12.DWORD dwThreadID;三、添加Init初始化函数。
C#编写windows服务程序步骤(精)

C#编写windows服务程序步骤 1. 新建一个项目,或者从选择当前解决方案--右键-添加--新建项目 2. 选择(项目类型Visual C#项目,(模板Windows 服务,填写要创建的服务名称(修改默认的WindowService1成为你自己的服务名称,然后按确定按钮.3. 资源管理器中默认创建一个WindowsService1的项目,项目下包括一个Service1.cs 文件4. 左侧选择"工具箱"--"组件",拖动一个Timer对象到Service1.cs [设计]这个页面窗体上.点击窗体上的Timers1足见,设置其属性:Interval属性数字N(例如200毫秒==1秒进行5次操作) 5.双击这个Timer1组件填加自己所需要的功能函数private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e { //本机电脑硬件配置文件 string strFileName=@"c:\ComputerInfo.txt"; string strTest="硬盘信息+显卡信息+主板信息+声卡信息+网卡信息+打印机信息"; //判断传送文件是否存在.如果不存在则写入一行测试信息 if (!File.Exists(strFileName{ File.CreateText(strFileName; } byte[] content=Encoding.UTF8.GetBytes(strTest; //创建文本文件对象 FileStream fs=newFileStream(strFileName,FileMode.OpenOrCreate,FileAccess.ReadWrite; //文件中写入测试数据 fs.Write(content,0,content.Length; //关闭文件对象 fs.Close(; } 6.添加完相应的函数代码后,从代码视图切换到设计视图,点鼠标右键选择“添加安装程序” 7. 然后在当前项目资源管理器中会发现多了一个ProjectInstaller.cs文件,点击该文件打开ProjectInstaller.cs [设计]窗体.会发现里面自动有两个组件"serviceProcessInstaller1"和"serviceInstaller1" 8. 设置serviceInstaller1组件的属性:ServiceName = MyService(名字自己随意修改的和 StartType = Automatic (开机自动运行方式 9. 设置serviceProcessInstaller1组件的属性:Account = LocalSystem 10. 选择当前解决方案,设置方案属性中的"启动项目"为刚才所添加的项目名称.按F5运行编译当前项目,会弹出一个对话框"无法从命令行或者调试器启动服务,必须首先安装Windows服务(使用installutil.exe,然后用Server Explorer、Windows服务管理工具或NET START命令启动它"。
用C语言进行Windows编程入门

用C语言进行Windows编程入门本文将介绍如何使用C语言进行Windows编程入门。
以下是从安装开发环境到编写简单的Windows应用程序的步骤。
1. 安装开发环境首先,您需要安装一个C语言的集成开发环境(IDE)。
推荐的IDE是Visual Studio,它是Microsoft开发的免费开发工具。
您可以从微软官网下载并按照向导进行安装。
2. 创建新项目打开Visual Studio后,选择“新建项目”,选择“Win32控制台应用程序”,然后点击“下一步”。
给项目起个名字并选择存储路径,然后点击“完成”。
3. 编写代码在IDE的代码编辑器中,您可以开始编写C语言代码。
Windows编程通常使用Windows API(应用程序编程接口)来访问操作系统的功能。
下面是一个简单的例子:```c#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {MessageBox(NULL, "Hello, Windows Programming!", "Welcome", MB_OK);return 0;}```以上代码将在应用程序启动时弹出一个消息框。
4. 编译和运行完成代码编写后,可以点击IDE的“生成”选项卡,然后选择“生成解决方案”。
此过程将会编译源代码并生成可执行文件。
完成后,您可以点击“调试”选项卡,然后选择“开始执行(调试)”以运行您的应用程序。
5. 创建窗口应用程序除了控制台应用程序,您也可以创建窗口应用程序。
下面是一个简单的窗口应用程序的示例代码:```c#include <windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {const char CLASS_NAME[] = "Sample Window Class";WNDCLASS wc = {0};wc.lpfnWndProc = WindowProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);HWND hwnd = CreateWindowEx(0,CLASS_NAME,"Window Title",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hInstance,NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);MSG msg = {0};while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_DESTROY:PostQuitMessage(0);return 0;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}}```以上代码将创建一个包含窗口标题和关闭按钮的窗口。
c#创建windows服务(WindowsServices)详细步骤

c#创建windows服务(WindowsServices)详细步骤Windows服务在Visual Studio 以前的版本中叫NT服务,在启⽤了新的名称。
⽤Visual C# 创建Windows服务不是⼀件困难的事,本⽂就将指导你⼀步⼀步创建⼀个Windows服务并使⽤它。
这个服务在启动和停⽌时,向⼀个⽂本⽂件中写⼊⼀些⽂字信息。
第⼀步:创建服务框架要创建⼀个新的 Windows 服务,可以从Visual C# ⼯程中选取 Windows 服务(Windows Service)选项,给⼯程⼀个新⽂件名,然后点击确定。
你可以看到,向导向⼯程⽂件中增加WebService1.cs类:其中各属性的含意是:Autolog 是否⾃动写⼊系统的⽇志⽂件CanHandlePowerEvent 服务时候接受电源事件CanPauseAndContinue 服务是否接受暂停或继续运⾏的请求CanShutdown 服务是否在运⾏它的计算机关闭时收到通知,以便能够调⽤ OnShutDown 过程CanStop 服务是否接受停⽌运⾏的请求ServiceName 服务名第⼆步:向服务中增加功能在 .cs代码⽂件中我们可以看到,有两个被忽略的函数 OnStart和OnStop。
OnStart函数在启动服务时执⾏,OnStop函数在停⽌服务时执⾏。
在这⾥,当启动和停⽌服务时,向⼀个⽂本⽂件中写⼊⼀些⽂字信息,代码如下:复制代码代码如下:protected override void OnStart(string[] args){FileStream fs = new FileStream(@"d:\mcWindowsService.txt" , FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs);m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);m_streamWriter.WriteLine("mcWindowsService: Service Started"+DateTime.Now.ToString()+"\n");m_streamWriter.Flush();m_streamWriter.Close();fs.Close();}protected override void OnStop(){FileStream fs = new FileStream(@"d:\mcWindowsService.txt" , FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs);m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);m_streamWriter.WriteLine(" mcWindowsService: Service Stopped "+DateTime.Now.ToString()+"\n");m_streamWriter.Flush();m_streamWriter.Close();fs.Close();}第三步: 将安装程序添加到服务应⽤程序Visual 随附有安装组件,可⽤来安装与服务应⽤程序相关联的资源。
C#编写Windows服务程序详细步骤详解(图文)

C#编写Windows服务程序详细步骤详解(图⽂)⼀、创建⼀个Windows Service1)创建Windows Service项⽬2)对Service重命名将Service1重命名为你服务名称,这⾥我们命名为ServiceTest。
⼆、创建服务安装程序1)添加安装程序之后我们可以看到上图,⾃动为我们创建了ProjectInstaller.cs以及2个安装的组件。
2)修改安装服务名右键serviceInsraller1,选择属性,将ServiceName的值改为ServiceTest。
3)修改安装权限右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。
三、写⼊服务代码1)打开ServiceTest代码右键ServiceTest,选择查看代码。
2)写⼊Service逻辑添加如下代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Diagnostics;using System.Linq;using System.ServiceProcess;using System.Text;namespace WindowsServiceTest{public partial class ServiceTest : ServiceBase{public ServiceTest(){InitializeComponent();}protected override void OnStart(string[] args){using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");}}protected override void OnStop(){using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");}}}}这⾥我们的逻辑很简单,启动服务的时候写个⽇志,关闭的时候再写个⽇志。
制作Windows服务和安装程序(C#版)

制作Windows服务和安装程序(C#版)1、创建服务项目:打开VS 2005编程环境,在C#中新建Windows服务程序2、将安装程序添加到服务程序:在服务项目中双击新建的服务类,默认情况下是Service1.cs,出现Service1.cs设计界面,鼠标右键选择“添加安装程序”,系统自动生成项目安装类ProjectInstaller.cs,安装类中添加了两个安装组件:ServiceProcessInstall和ServiceInstall,并且服务的属性被复制到组件中。
3、设置服务属性:①设置登录用户:将ServiceProcessInstaller类的Account属性改为LocalSystem,这样服务可以在任意用户登录系统系统时,自启动服务。
②设置服务启动方式:单击ServiceInstaller组件将StartType属性设置为Automatic(随系统启动)③设置Windows服务名:设置ServiceInstaller组件中的ServiceName的属性为服务的名称,如上图所示的“Service1”④设置服务描述、服务名称:在ServiceInstaller组件中设置Description和DisPlayName的值分别显示服务的描述和服务名称。
4、编程实现服务程序功能的启动、停止:打开Service1.cs类的代码,在服务启动、停止方法中分别添加服务程序的启动、停止需对应的功能代码。
protected override void OnStart(string[] args){// TODO:在此处添加代码以启动服务。
_ProcessParametersMaching.StartIni();}protected override void OnStop(){// TODO:在此处添加代码以执行停止服务所需的关闭操作。
_ProcessParametersMaching.ReleaseIni();}注意:在服务项目中添加逻辑处理类、数据处理类,通过统一的方法去调用,如StartIni()和ReleaseIni()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdi o.h>#include <Windows.h>#include <tchar.h>TCHAR szServ iceN ame[] = _T("My TestSer v ice"); DWORD dwThreadID;HANDLE hEvent = INVALID_HANDLE_VALUE; SERVICE_STATUS s tatus;SERVICE_STATUS_HANDLE hServ iceStatus;v oi d Init();BOOL IsSer v iceInstalled();BOOL InstallSer v ice();BOOL U ninstallSer v ice();BOOL Ser v iceCtrlStart();BOOL Ser v iceCtrlStop();v oi d WINAPI Ser v iceMai n();v oi d WINAPI Ser v iceStrl(DWORD dwOpc ode); v oi d LogEv ent(LPCTSTR pszFormat, ...);//Usuage// Ins tall ser v ice://TestServ ic e.exe /i nstall// Uninstall ser v ice://TestServ ic e.exe /unins tall// Start ser v ice://TestServ ic e.exe /s tart// Stop s erv ic e://TestServ ic e.exe /s topint main( int argc, char* argv[] ){Init();dwT hreadID = ::GetCurrentThreadId();SERVICE_TABLE_ENTRY st[] ={{ szServ ic eName, (LPSERVICE_MAIN_FUNCTION)Serv ic eMain }, { NULL, NULL }};LPSTR lpC mdLine = argv[1];if ( argc == 2 ){BOOL bRet;if (stricmp(lpCmdLine, "/ins tall") == 0){bRet = InstallSer v ice();if ( bRet == TRUE ){printf( "Ins tall ser v ice %s succ ess", szServ ic eName );}else{printf( "Ins tall ser v ice %s failed", sz Ser v iceName );}}els e if (stricmp(lpCmdLine, "/uninstall") == 0){bRet = Uni nstallServ ic e();if ( bRet == TRUE ){printf( "Uninstall ser v ice %s succ ess", szServ ic eName ); }else{printf( "Uninstall ser v ice %s failed", szServ ic eName );}}else if (stricmp(lpC mdLine, "/start") == 0){bRet = Ser v iceCtrlStart();if ( bRet == TRUE ){printf( "Start ser v ice %s succ ess", szServ ic eName );}else{printf( "Start ser v ice %s fail ed", sz Ser v iceName );}}else if (stricmp(lpC mdLine, "/stop") == 0){bRet = Ser v iceCtrlStop();if ( bRet == TRUE ){printf( "Stop s er v ice %s s uccess", szSer v iceN ame );}else{printf( "Stop s er v ice %s failed", szServ iceN ame );}}els e{if (!::StartSer v iceCtrlDispatc her(st)){LogEv ent(_T("Register Ser v ice Main Function Error!")); }}}else{if (!::StartSer v iceCtrlDispatc her(st)){LogEv ent(_T("Register Ser v ice M ain Function Error!"));}}return 0;}//初始化相关结构v oi d Init(){hSer v iceStatus = NULL;status.dwServ ic eT y pe = SERVICE_WIN32_OWN_PROC ESS; status.dwCurrentState = SERVIC E_STOPPED;status.dwControlsAcc epted = SERVICE_ACCEPT_STOP;status.dwWi n32Ex itCode = 0;status.dwServic eSpecificEx itCode = 0;status.dwChec k Poi nt = 0;status.dwWaitHint = 0;}//服务主线程函数,既用户选择开启服务时调用的函数v oi d WINAPI Ser v iceMai n(){// Register the c ontrol r equest handlerstatus.dwCurrentState = SERVIC E_ST ART_PENDING;status.dwControlsAcc epted = SERVICE_ACCEPT_STOP;&a, mp;n, bsp; LogEv ent(_T("Ser v iceMai n"));//注册服务控制hSer v iceStatus = RegisterServ ic eCtrlHandler(szSer v iceN ame, Ser v iceStrl); if (hSer v iceStatus == NULL){LogEv ent(_T("Handl er not installed"));return;}SetSer v iceStatus(hSer v iceStatus, &status);//如下代码可以为启动服务前的准备工作hEv ent = ::CreateEv ent( NULL, TRUE, FALSE, NULL );if ( hEv ent == NULL ){status.dwCurrentState = SERVICE_STOPPED;SetServ ic eStatus(hSer v iceStatus, &status);LogEv ent(_T("Failure to start ser v ice"));return;}////更改服务状态为启动status.dwWi n32Ex itCode = S_OK;status.dwChec k Poi nt = 0;status.dwWaitHint = 0;status.dwCurrentState = SERVIC E_RUNNING;SetSer v iceStatus(hSer v iceStatus, &status);//等待用户选择停止服务,//当然你也可以把你的服务代码用线程来执行,//此时这里只需等待线程结束既可。
while ( WaitF orSingleObj ect( hEv ent, 1000 ) != WAIT_OBJ ECT_0 ) {//模拟服务的运行,应用时将主要任务放于此即可LogEv ent(_T("Ser v ice runing..."));}////停止服务status.dwCurrentState = SERVIC E_STOPPED;SetSer v iceStatus(hSer v iceStatus, &status);LogEv ent(_T("Ser v ice s topped"));}//服务控制函数v oi d WINAPI Ser v iceStrl(DWORD dwOpc ode){s witch (dwOpc ode){c ase SERVICE_CONTROL_STOP:status.dwCurrentState = SERVICE_STOP_PENDING; SetServ ic eStatus(hSer v iceStatus, &status);//告诉服务线程停止工作::SetEv ent( hEv ent );LogEv ent(_T("want to s topped Ser v ice"));br eak;c ase SERVICE_CONTROL_PAUSE:br eak;c ase SERVICE_CONTROL_CONTINUE:br eak;c ase SERVICE_CONTROL_INTERROGATE:br eak;c ase SERVICE_CONTROL_SHUTDOWN:br eak;default:LogEv ent(_T("Bad ser v ice r equest"));}}//判断服务是否已安装BOOL IsSer v iceInstalled(){BOOL bRes ult = FALSE;//打开服务控制管理器SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if (hSCM != NULL){//打开服务SC_HANDLE hServ ice = ::OpenSer v ice(hSCM, szSer v iceN ame, SERVICE_QUERY_CONFIG); if (hSer v ice != NULL){bResult = TRUE;::CloseSer v iceHandle(hSer v ice);}::Clos eServ ic eHandle(hSCM);}return bResult;}//安装服务BOOL InstallSer v ice(){if (Is Ser v iceInstalled())return TRUE;//打开服务控制管理器SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if (hSCM == NULL){return FALSE;}// Get the ex ec utable file pathTCHAR szFilePath[MAX_PATH];::GetM odul eFileName(NULL, szFilePath, MAX_PATH);//创建服务SC_HANDLE hServ ic e = ::CreateSer v ice(hSCM,szServ ic eName,szServ ic eName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START, //如果为SERVIC E_DEMAND_ST ART则表示此服务需手工启动 SERVICE_ERROR_NORMAL,szFilePath,NULL,NULL,_T(""),NULL,NULL);if (hSer v ice == NULL){::Clos eServ ic eHandle(hSCM);return FALSE;}::CloseServ ic eHandle(hSer v ice);::CloseServ ic eHandle(hSCM);return TRUE;}//删除服务BOOL U ninstallSer v ice(){if (!IsSer v iceInstalled())return TRUE;SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if (hSCM == NULL){return FALSE;}SC_HANDLE hServ ic e = ::OpenSer v ice(hSCM, szServ iceN ame, SERVICE_STOP | DELETE); if (hSer v ice == NULL){::Clos eServ ic eHandle(hSCM);return FALSE;}SERVICE_STATUS status;::Contr olSer v ice(hSer v ice, SERVICE_CONTROL_STOP, &status);//删除服务BOOL bDelete = ::DeleteServ ic e(hSer v ice);::CloseServ ic eHandle(hSer v ice);::CloseServ ic eHandle(hSCM);if (bD elete)return TRUE;LogEv ent(_T("Ser v ice c ould not be deleted"));}//开启服务BOOL Ser v iceCtrlStart(){BOOL bRet;SC_HANDLE hSCM;SC_HANDLE hServ ic e;hSCM=OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); if (hSCM!=NULL){hSer v ice=OpenSer v ice( hSCM, szSer v iceN ame, SERVICE_START); if (hSer v ice!=NULL){//开始Ser v icebRet = StartSer v ice(hServ ic e,0,NULL);Clos eSer v iceH andl e(hServ ice);}else{bRet = FALSE;}CloseSer v iceHandl e(hSCM);}else{bR et = FALSE;}}//停止服务BOOL Ser v iceCtrlStop(){BOOL bRet;SC_HANDLE hSCM;SC_HANDLE hServ ic e;SERVICE_STATUS Ser v iceStatus;hSCM=OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );if (hSCM!=NULL){hSer v ice=OpenSer v ice( hSCM, szSer v iceN ame, SERVICE_STOP|SERVICE_QU ERY_ST ATUS ); if (hSer v ice!=NULL){Quer y Serv ic eStatus( hSer v ice, &Ser v iceStatus );if (Serv ic eStatus.dwCurrentState == SERVICE_RUNNING){bRet = C ontrolSer v ice( hSer v ice, SERVICE_CONTROL_STOP, &Serv ic eStatus );}else{bRet = F ALSE;}Clos eSer v iceH andl e( hServ ic e );}else{bRet = FALSE;}CloseSer v iceHandl e( hSCM );}else{bR et = FALSE;}return bRet;}//记录日记v oi d LogEv ent(LPCTSTR pFormat, ...){TCHAR chMsg[256];HANDLE hEv entSource;LPTSTR lpsz Strings[1];va_list pArg;va_start(pArg, pFor mat);_v stprintf(chMsg, pFormat, pArg);va_end(pArg);lpsz Strings[0] = c hMsg;hEv entSource = RegisterEv entSource(NULL, szServ iceN ame);if (hEv entSource != NULL){ReportEvent(hEv entSource, EVENTLOG_INFORMATION_T YPE, 0, 0, NULL, 1, 0, (LPCTSTR*) &lpszStrings[0], NULL); DeregisterEventSource(hEventSource);}}。