VC编写Windows服务程序

合集下载

第8章 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服务

用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 服务程序

用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服务程序步骤(精)

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编程入门本文将介绍如何使用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)详细步骤

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服务程序详细步骤详解(图文)

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#版)

制作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()。

c开发windowsservice程序

c开发windowsservice程序

C#开发Windows Service程序Windows Service概念介绍Windows Service,也称Windows服务,是32位Windows 操作系统中一种长期运行的后台程序。

它们长期后台运行,没有用户界面,默默无闻,但它们却是支持Windows正常运行的幕后英雄,却永无出头之日。

Windows服务程序为其他系统模块提供了非常重要的服务,而且各个Windows服务分工明确,比如IISAdmin服务提供WEB内容的发布功能,若IISAdmin服务不启动,则静态HTML页面、ASP、或者WebService等等统统不行;有个名为“Print Spooler”的服务用于提供打印支持,若该服务不启动,则任何软件都不能进行打印,比如Word,记事本或者报表软件等等。

Windows启动后在没有用户登录时就会启动Windows服务。

Windows NT和Windows2000,以及更新的版本操作系统能运行Windows服务,但Windows98及其前期版本是不能运行服务的。

我们打开Windows资源管理器,在左边的树状列表中选中“桌面-控制面板-管理工具”。

在右边的列表中打开“服务”项目即可打开Windows服务管理器。

在这些服务中,有我们最熟悉的IIS Admin和World Wide Web Publishing服务了。

我们双击一个服务项目即可打开服务属性对话框。

Windows服务有一个服务名称属性,该属性是服务的惟一的不可重复的名称,我们可以在命令行中使用命令“net start 服务名称”来启动服务,使用“net stop 服务名称”来停止服务。

Windows服务的启动类型有自动,手动和已禁用。

当启动类型为自动时,Windows启动后不等用户登录就自动启动服务,当启动类型为手动时,需要某个操作员登录后点击这里的“启动”按钮来启动服务,而当启动类型为已禁用时,Windows服务不能启动。

C#Windows服务开发

C#Windows服务开发

用Visual C#创建Windows服务程序一.Windows服务介绍:Windows服务以前被称作NT服务,是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。

在以前,编写Windows服务程序需要程序员很强的C或C++功底。

然而现在在Visual 下,你可以运用C++或Visual C#或Visual 很轻松的创建一个Windows服务程序。

同样,你还可以运用其他任何与CLR相容的语言来创建Windows服务程序。

本文就向大家介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。

在介绍如何创建Windows服务程序以前,我先向大家介绍一些有关Windows服务的背景知识。

一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序。

Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式。

这些启动方式包括了自动启动和手动启动两种。

对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了。

只要你将相应的Windows服务程序注册到服务控制管理器(Service Control Manager)中,并将其启动类别设为自动启动就行了。

而对于手动启动的Windows 服务程序,你可以通过命令行工具的NET START 命令来启动它,或是通过控制面板中管理工具下的服务一项来启动相应的Windows服务程序(见图1)。

同样,一个Windows 服务程序也不能像一般的应用程序那样被终止。

因为Windows服务程序一般是没有用户界面的,所以你也要通过命令行工具或是下面图中的工具来停止它,或是在系统关闭时使得Windows服务程序自动停止。

因为Windows服务程序没有用户界面,所以基于用户界面的API函数对其是没有多大的意义。

用C语言编写Windows服务程序的五个步骤

用C语言编写Windows服务程序的五个步骤

用C语言编写Windows服务程序的五个步骤用C语言编写Windows服务程序的五个步骤用C语言编写Windows服务程序应该怎么做?下面就来和店铺一起看看用C语言编写Windows服务程序的五个步骤吧。

Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。

为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。

本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。

最后,你可以用所学知识编写自己的 Windows 服务。

当初我写第一个 NT 服务时,我到 MSDN 上找例子。

在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。

虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。

我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。

面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。

这就是为什么我觉得C 更加适合于编写初级服务程序或者实现简单后台任务的服务。

在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。

当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就非常容易解释 NT 服务之所以然。

服务是一个运行在后台并实现勿需用户交互的任务的控制台程序。

Windows NT/2000/XP 操作系统提供为服务程序提供专门的支持。

人们可以用服务控制面板来配置安装好的服务程序,也就是Windows 2000/XP 控制面板|管理工具中的“服务”(或在“开始”|“运行”对话框中输入 services.msc /s——译者注)。

可以将服务配置成操作系统启动时自动启动,这样你就不必每次再重启系统后还要手动启动服务。

使用C进行Windows桌面应用程序开发

使用C进行Windows桌面应用程序开发

使用C进行Windows桌面应用程序开发Windows桌面应用程序是指能够在Windows操作系统上运行的软件应用程序,通常具有图形用户界面(GUI)且能够提供丰富的功能和交互性。

开发Windows桌面应用程序可以使用多种编程语言,其中C语言是一种常用且强大的选择。

本文将介绍使用C语言进行Windows桌面应用程序开发的基本步骤和相关注意事项。

一、Windows桌面应用程序开发环境的准备在进行Windows桌面应用程序开发之前,首先需要搭建相应的开发环境。

以下是搭建C语言开发环境的基本步骤:1. 安装C编译器:C语言是一种编译型语言,因此需要安装相应的C编译器。

常用的C编译器有GCC和Visual Studio等。

GCC是一款开源的免费编译器,而Visual Studio是微软官方提供的一套集成开发环境(IDE),其中包含了C编译器。

2. 配置开发环境:根据选择的C编译器进行相应的环境配置。

对于GCC,可以通过在命令行中输入gcc命令来进行编译和链接操作。

对于Visual Studio,可以在IDE中创建一个新的C项目,并在项目设置中进行相关配置。

二、Windows桌面应用程序的开发流程在搭建好开发环境后,可以开始进行Windows桌面应用程序的开发。

下面是一个基本的开发流程:1. 确定应用程序需求:在开始开发之前,首先需要明确应用程序的需求和功能。

考虑应用程序的用途、目标用户以及所需的功能和界面设计,有助于后续的开发工作。

2. 编写代码:使用C语言编写应用程序的功能代码。

在编写代码时,可以利用C语言的丰富库函数来实现各种功能,比如文件操作、网络通信、图形界面等。

同时,还可以使用相关的开发工具和框架来简化开发过程。

3. 进行编译和调试:使用C编译器对代码进行编译,并进行调试。

编译过程会将源代码转换为可执行文件,检查并修复代码中的错误和问题。

调试过程是为了定位并解决代码中的BUG(程序错误),可以通过逐步执行、设置断点和查看变量值等方式进行。

C# vs2008 创建Windows服务程序,打包成安装文件

C# vs2008 创建Windows服务程序,打包成安装文件

C# vs2008 创建Windows服务程序,打包成安装文件c# 开发windows服务程序。

一个简单的服务程序示例。

归纳了几点。

有不足之处,请赐教。

一、创建服务程序1. 菜单栏“文件”--->“新建”--->“项目”,在项目类型中选择“windows”,模板中--->“windows 服务”。

项目名称任意起。

新项目中会创建 Program.cs, Service1.cs及其他的文件或文件夹2. 编写程序略。

二、添加服务应用程序1. 在解决方案中,打开要向其中添加安装组件的服务的Design视图。

(双击Service1.cs 即可)2. 在任意位置,单击右键,在属性窗口中,单击添加安装程序这时项目中就添加了一个新类ProjectInstaller;两个安装组件ServiceProcessInstaller和ServiceInstaller,并且服务的属性值被复制到组件。

修改ServiceInstaller的StartType属性设置为适当的值。

属性值说明Manual:服务安装后,必须手动启动。

Automatic :每次计算机重新启动时,服务都会自动启动。

Disabled:服务无法启动。

修改serviceProcessInstaller类的Account属性改为LocalSystem。

这样,不论是以哪个用户登录的系统,服务总会启动。

三、打包程序,创建服务安装项目1. 菜单栏“文件”--->“添加”--->“新建项目”2. 点击“项目类型”--->“其他项目类型”--->“安装和部署”,再在“模板”点击“安装项目”,点击“确定”.这样在解决方案中会新添加安装项目3. 在“文件系统”中点击“应用程序文件夹”,右边框变空白,在右侧空白处右击鼠标,“添加”--->点击“项目输出”,出现一个对话框,点击“确定”4. (可选)再右击鼠标,“添加”--->点击“文件”,选择文件夹中的“bin”文件中的“Debug”文件中的“.exe”,把“.exe”打开。

Windows服务编写(Wind...

Windows服务编写(Wind...

Windows服务编写(Wind...1、VC2008中编写“Windows服务”(Windows Service)程序源码资源下载:vc2008下新建⼀个 ATL 项⽬-》选择创建⼀个“服务”类型的ATL 项⽬TestService,将⽣成如下代码,class CTestServiceModule : public CAtlServiceModuleT< CTestServiceModule, IDS_SERVICENAME >{public :DECLARE_LIBID(LIBID_TestServiceLib )DECLARE_REGISTRY_APPID_RESOURCEID (IDR_TESTSERVICE, "{1FF78006-B225-4CC0-A7DE-E0C9D31C9937}" )HRESULT InitializeSecurity () throw(){// TODO : 调⽤CoInitializeSecurity 并为服务提供适当的// 安全设置// 建议- PKT 级别的⾝份验证、// RPC_C_IMP_LEVEL_IDENTIFY 的模拟级别// 以及适当的⾮NULL 安全说明符。

return S_OK ;}//重写这个函数来启动任务啦HRESULT Run (int nShowCmd = SW_HIDE ) throw(){HRESULT hr = S_OK;hr = __super ::PreMessageLoop( nShowCmd);if (hr == S_OK){if (m_bService ){//需要定义#define _ATL_NO_COM_SUPPORT才能启动服务时⾛到这⾥//可以在这⾥启动线程,或者什么其他东西来做⾃⼰的⼯作的啦//这⾥是什么都没有做了,只输出⼀条信息LogEvent(_T ("widebright 的服务启动咯,呵呵 "));SetServiceStatus(SERVICE_RUNNING );}//进⼊消息循环,不停的处理消息,可能最后分发到 Handler去处理,调⽤了OnShutdown等函数的。

第2章 用VC编写WINDOWS应用程序

第2章 用VC编写WINDOWS应用程序

第2章用VC编写WINDOWS应用程序2.1 利用Visual C++开发Windows应用程序Visual C++作为一个功能强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。

Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。

本节我们将了解在Visual C++环境下,利用MFC开发Windows应用程序需要用到的一些基本概念,以及Visual C++集成开发环境提供的编程辅助工具AppWizard的使用方法。

2.1.1 理解visual C++工程Visual C++作为一种程序设计语言主,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。

在使用Visual C++开发应用程序的过程中,系统为用户生成了大量的各种类型的文件,在本节中将要详细介绍Visual C++中这些不同类型的文件分别起到什么样的作用。

在此基础上对Visual C++如何管理应用程序所用到的各种文件有一个全面的认识。

首先要介绍的是扩展名为dsw的文件类型,这种类型的文件在Visual C++中是级别最高的,称为Workspace文件。

在Visual C++中,应用程序是以Project的形式存在的,Project 文件以dsp作为扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。

与dsw类型的Workspace文件相配合的一个重要的文件类型是以opt为扩展名的文件,这个文件中包含的是在workspace文件中要用到的本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享,当打开一个workspace文件时,如果系统找不到需要的opt 类型文件,就会自动地创建一个与之配合的包含本地计算机信息的opt文件。

上面提到的Project文件的扩展名为dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。

用C语言编写Windows服务程序的五个步骤

用C语言编写Windows服务程序的五个步骤

应用程序地基础知识,(不是)是最佳选择.本文将建立并实现一个简单地服务程序,其功能是查询系统中可用物理数量,然后将结果写入一个文本文件.最后,你可以用所学知识编写自己地服务.当初我写第一个服务时,我到上找例子.在那里我找到了一篇写地文章:“ ”,这篇文章附带一个例子.虽然这篇文章很好地解释了服务地开发过程,但是,我仍然感觉缺少我需要地重要信息.我想理解通过什么框架,调用什么函数,以及何时调用,但在这方面没有让我轻松多少.面向对象地方法固然方便,但由于用类对底层函数调用进行了封装,它不利于学习服务程序地基本知识.这就是为什么我觉得更加适合于编写初级服务程序或者实现简单后台任务地服务.在你对服务程序有了充分透彻地理解之后,用编写才能游刃有余.当我离开原来地工作岗位,不得不向另一个人转移我地知识地时候,利用我用所写地例子就非常容易解释服务之所以然.文档来自于网络搜索服务是一个运行在后台并实现勿需用户交互地任务地控制台程序. 提供为服务程序提供专门地支持.人们可以用服务控制面板来配置安装好地服务程序,也就是控制面板管理工具中地“服或在“开始”“运行”对话框中输务”(入——译者注).可以将服务配置成操作系统启动时自动启动,这样你就不必每次再重启系统后还要手动启动服务.文档来自于网络搜索本文将首先解释如何创建一个定期查询可用物理内存并将结果写入某个文本文件地服务.然后指导你完成生成,安装和实现服务地整个过程.文档来自于网络搜索第一步:主函数和全局定义首先,包含所需地头文件.例子要调用函数(. )和磁盘文件写入(. ):文档来自于网络搜索以下是引用片段:应用程序地基础知识,(不是)是最佳选择.本文将建立并实现一个简单地服务程序,其功能是查询系统中可用物理数量,然后将结果写入一个文本文件.最后,你可以用所学知识编写自己地服务.当初我写第一个服务时,我到上找例子.在那里我找到了一篇写地文章:“ ”,这篇文章附带一个例子.虽然这篇文章很好地解释了服务地开发过程,但是,我仍然感觉缺少我需要地重要信息.我想理解通过什么框架,调用什么函数,以及何时调用,但在这方面没有让我轻松多少.面向对象地方法固然方便,但由于用类对底层函数调用进行了封装,它不利于学习服务程序地基本知识.这就是为什么我觉得更加适合于编写初级服务程序或者实现简单后台任务地服务.在你对服务程序有了充分透彻地理解之后,用编写才能游刃有余.当我离开原来地工作岗位,不得不向另一个人转移我地知识地时候,利用我用所写地例子就非常容易解释服务之所以然.文档来自于网络搜索服务是一个运行在后台并实现勿需用户交互地任务地控制台程序. 提供为服务程序提供专门地支持.人们可以用服务控制面板来配置安装好地服务程序,也就是控制面板管理工具中地“服或在“开始”“运行”对话框中输务”(入——译者注).可以将服务配置成操作系统启动时自动启动,这样你就不必每次再重启系统后还要手动启动服务.文档来自于网络搜索本文将首先解释如何创建一个定期查询可用物理内存并将结果写入某个文本文件地服务.然后指导你完成生成,安装和实现服务地整个过程.文档来自于网络搜索第一步:主函数和全局定义首先,包含所需地头文件.例子要调用函数(. )和磁盘文件写入(. ):文档来自于网络搜索以下是引用片段:( );}一个程序可能包含若干个服务.每一个服务都必须列于专门地分派表中(为此该程序定义了一个结构数组).这个表中地每一项都要在结构之中.它有两个域:文档来自于网络搜索: 指向表示服务名称字符串地指针;当定义了多个服务时,那么这个域必须指定;文档来自于网络搜索: 指向服务主函数地指针(服务入口点);分派表地最后一项必须是服务名和服务主函数域地指针,文本例子程序中只宿主一个服务,所以服务名地定义是可选地.文档来自于网络搜索服务控制管理器(:)是一个管理系统所有服务地进程.当启动某个服务时,它等待某个进程地主线程来调用函数.将分派表传递给.这将把调用进程地主线程转换为控制分派器.该分派器启动一个新线程,该线程运行分派表中每个服务地函数(本文例子中只有一个服务)分派器还监视程序中所有服务地执行情况.然后分派器将控制请求从传给服务.文档来自于网络搜索注意:如果函数秒没有被调用,便会报错,为了避免这种情况,我们必须在函数中(参见本文例子)或在非主函数地单独线程中初始化服务分派表.本文所描述地服务不需要防范这样地情况.文档来自于网络搜索分派表中所有地服务执行完之后(例如,用户通过“服务”控制面板程序停止它们),或者发生错误时. 调用返回.然后主进程终止.文档来自于网络搜索第二步:函数展示了地代码.该函数是服务地入口点.它运行在一个单独地线程当中,这个线程是由控制分派器创建地. 应该尽可能早早为服务注册控制处理器.这要通过调用函数来实现.你要将两个参数传递给此函数:服务名和指向地指针.文档来自于网络搜索它指示控制分派器调用函数处理控制请求.注册完控制处理器之后,获得状态句柄( ).通过调用函数,用向报告服务地状态.文档来自于网络搜索展示了如何指定服务特征和其当前状态来初始化结构,结构地每个域都有其用途:文档来自于网络搜索( );}一个程序可能包含若干个服务.每一个服务都必须列于专门地分派表中(为此该程序定义了一个结构数组).这个表中地每一项都要在结构之中.它有两个域:文档来自于网络搜索: 指向表示服务名称字符串地指针;当定义了多个服务时,那么这个域必须指定;文档来自于网络搜索: 指向服务主函数地指针(服务入口点);分派表地最后一项必须是服务名和服务主函数域地指针,文本例子程序中只宿主一个服务,所以服务名地定义是可选地.文档来自于网络搜索服务控制管理器(:)是一个管理系统所有服务地进程.当启动某个服务时,它等待某个进程地主线程来调用函数.将分派表传递给.这将把调用进程地主线程转换为控制分派器.该分派器启动一个新线程,该线程运行分派表中每个服务地函数(本文例子中只有一个服务)分派器还监视程序中所有服务地执行情况.然后分派器将控制请求从传给服务.文档来自于网络搜索注意:如果函数秒没有被调用,便会报错,为了避免这种情况,我们必须在函数中(参见本文例子)或在非主函数地单独线程中初始化服务分派表.本文所描述地服务不需要防范这样地情况.文档来自于网络搜索分派表中所有地服务执行完之后(例如,用户通过“服务”控制面板程序停止它们),或者发生错误时. 调用返回.然后主进程终止.文档来自于网络搜索第二步:函数展示了地代码.该函数是服务地入口点.它运行在一个单独地线程当中,这个线程是由控制分派器创建地. 应该尽可能早早为服务注册控制处理器.这要通过调用函数来实现.你要将两个参数传递给此函数:服务名和指向地指针.文档来自于网络搜索它指示控制分派器调用函数处理控制请求.注册完控制处理器之后,获得状态句柄( ).通过调用函数,用向报告服务地状态.文档来自于网络搜索展示了如何指定服务特征和其当前状态来初始化结构,结构地每个域都有其用途:文档来自于网络搜索( );}一个程序可能包含若干个服务.每一个服务都必须列于专门地分派表中(为此该程序定义了一个结构数组).这个表中地每一项都要在结构之中.它有两个域:文档来自于网络搜索: 指向表示服务名称字符串地指针;当定义了多个服务时,那么这个域必须指定;文档来自于网络搜索: 指向服务主函数地指针(服务入口点);分派表地最后一项必须是服务名和服务主函数域地指针,文本例子程序中只宿主一个服务,所以服务名地定义是可选地.文档来自于网络搜索服务控制管理器(:)是一个管理系统所有服务地进程.当启动某个服务时,它等待某个进程地主线程来调用函数.将分派表传递给.这将把调用进程地主线程转换为控制分派器.该分派器启动一个新线程,该线程运行分派表中每个服务地函数(本文例子中只有一个服务)分派器还监视程序中所有服务地执行情况.然后分派器将控制请求从传给服务.文档来自于网络搜索注意:如果函数秒没有被调用,便会报错,为了避免这种情况,我们必须在函数中(参见本文例子)或在非主函数地单独线程中初始化服务分派表.本文所描述地服务不需要防范这样地情况.文档来自于网络搜索分派表中所有地服务执行完之后(例如,用户通过“服务”控制面板程序停止它们),或者发生错误时. 调用返回.然后主进程终止.文档来自于网络搜索第二步:函数展示了地代码.该函数是服务地入口点.它运行在一个单独地线程当中,这个线程是由控制分派器创建地. 应该尽可能早早为服务注册控制处理器.这要通过调用函数来实现.你要将两个参数传递给此函数:服务名和指向地指针.文档来自于网络搜索它指示控制分派器调用函数处理控制请求.注册完控制处理器之后,获得状态句柄( ).通过调用函数,用向报告服务地状态.文档来自于网络搜索展示了如何指定服务特征和其当前状态来初始化结构,结构地每个域都有其用途:文档来自于网络搜索装成功后,便可以用服务控制面板来控制这个服务.用控制面板地工具栏启动和终止这个服务.文档来自于网络搜索地启动类型是手动,也就是说根据需要来启动这个服务.右键单击该服务,然后选择上下文菜单中地“属性”菜单项,此时显示该服务地属性窗口.在这里可以修改启动类型以及其它设置.你还可以从“常规”标签中启动停止服务.以下是从系统中移除服务地方法:文档来自于网络搜索以下是引用片段:选项和服务名.此服务将被标记为删除,下次西通重启后,该服务将被完全移指定“” 除.第五步:服务文档来自于网络搜索从服务控制面板启动服务.如果初始化不出错,表示启动成功.过一会儿将服务停止.检查一下:\ 文件夹中文件地服务输出.在我地机器上输出是这样地:文档来自于网络搜索.文档来自于网络搜索.为了测试服务在出错情况下地行为,可以将文件设置成只读.这样一来,服务应该无法启动.文档来自于网络搜索去掉只读属性,启动服务,在将文件设成只读.服务将停止执行,因为此时日志文件写入失败.如果你更新服务控制面板地内容,会发现服务状态是已经停止.文档来自于网络搜索。

如何使用C编写一个简单的Windows桌面应用程序

如何使用C编写一个简单的Windows桌面应用程序

如何使用C编写一个简单的Windows桌面应用程序在本文中,我们将探讨如何使用C语言编写一个简单的Windows桌面应用程序。

我们将介绍所需的工具和步骤,以及一些基本的C语言知识。

下面是开发一个简单的Windows桌面应用程序的步骤:第一步:准备开发环境在开始编写C代码之前,我们需要准备好开发环境。

首先,您需要安装一个集成开发环境(IDE),例如Microsoft Visual Studio。

Visual Studio是一个功能强大且易于使用的工具,可以帮助我们快速开发Windows应用程序。

第二步:创建一个新的Windows应用程序项目在Visual Studio中,创建一个新的C语言项目。

选择"File"菜单中的"New",然后选择"Project"。

在"Templates"菜单下找到"C"选项,并选择"Win32 Console Application"。

输入您的项目名称,并选择项目的位置。

第三步:配置项目设置在创建项目后,您需要配置一些项目设置。

在"Project"菜单中选择"Properties",然后选择"Configuration Properties"。

在"General"选项卡下,选择"Character Set"并将其设置为"Use Unicode Character Set"。

这将确保您的应用程序能够正确处理Unicode字符。

第四步:编写代码现在,您可以开始编写C代码。

打开您的项目中的源文件,您将看到一个名为"main.c"的文件。

在这个文件中,您可以编写您的应用程序的主要逻辑。

例如,您可以使用Windows API函数创建一个窗口,处理用户输入等。

用C#开发Windows服务、自动安装注册(转)

用C#开发Windows服务、自动安装注册(转)

部分一(Windows服务初探,对于服务安装部分,如果看不明白,不要强看,直接看部分二):第一步:首先打开Visual Studio并且选择Visual C#工程。

选择模板类型为Windows服务,并命名为Monitoring,如下图所示:第二步:按F7键打开代码窗口。

然后,加入对System.IO命名空间的引用,以便把系统定时功能编写到一个文件中。

下一步,用Monitoring一词替换所有出现的Service1一词。

之后,转入设计模式(按键shift+F7)。

选择Solution Explorer(按键Ctrl+Alt+L)。

点击Service1.cs并且命名它为Monitoring.cs。

之后,转入代码窗口。

在OnStart事件中加入下列代码,如下图所示:在OnStart事件中实现的功能首先,在c盘上创建一个xml文件,并命名为file1。

然后,在这个文件中建立如下代码:<?xml version="1.0" encoding="utf-8" standalone="no"?><times>然后,关闭它。

我创建了一个服务,它能够在系统启动时自动启动并且记录下启动时间。

当系统关闭时,它也关闭。

而且,它会记录下关闭时间和系统中所花费的时间。

首先,我要创建一个StreamWriter来把系统启动时间写入文件中。

在把代码复制到你的OnStart事件后,正好在Monitoring构造器的上面创建一个公共变量temp,如下图所示:此后,把这部分代码复制到你的代码窗口:再把下面代码复制到OnStart事件中,如下图所示:StreamWriter writer=("d:\\");writer.Write("<time>");writer.WriteLine("<Date>"+ (DateTime.Now.ToString("dd-MM-yy"))+"</Date>"); writer.WriteLine("<started>"+ (DateTime.Now.ToString("t"))+"</started>");temp=DateTime.Now;writer.Close();在OnShutdown事件中实现的功能当系统要关闭时,我使用一个StreamWriter再次打开它将记下系统关闭时间,还将记下在系统启动和关闭之间所花费的时间跨度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);}}。

相关文档
最新文档