C语言实现Windows服务并进行安装部署

// service_test.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <Windows.h>

#include <stdio.h>

#define  SLEEP_TIME 5000

#define  LOGFILE "D:\\TEST\\memstatuse.txt"

int WriteToLog(char *);

SERVICE_STATUS ServiceStatus;

SERVICE_STATUS_HANDLE hStaus;

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

void ControlHandler(DWORD request);

int InitService();

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

{

SERVICE_TABLE_ENTRY ServiceTable[2];

ServiceTable[0].lpServiceName = L"MemoryStatus";

ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;

ServiceTable[1].lpServiceName = NULL;

ServiceTable[1].lpServiceProc = NULL;

StartServiceCtrlDispatcher(ServiceTable);

return 0;

}

void ServiceMain(int argc,char **argv)

{

BOOL bRet;

bRet = TRUE;

ServiceStatus.dwServiceType = SERVICE_WIN32;

ServiceStatus.dwCurrentState = SERVICE_START_PENDING;

ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;

ServiceStatus.dwWin32ExitCode = 0;

ServiceStatus.dwServiceSpecificExitCode = 0;

ServiceStatus.dwCheckPoint = 0;

ServiceStatus.dwWaitHint = 0;

hStaus = RegisterServiceCtrlHandler(L"MemoryStatus",(LPHANDLER_FUNCTION)ControlHandler);

if (hStaus == (SERVICE_STATUS_HANDLE)0)

{

return;

}

ServiceStatus.dwCurrentState = SERVICE_RUNNING;

SetServiceStatus(hStaus,&ServiceStatus);

char memory[256];

while(ServiceStatus.dwCurrentState == SERVICE_RUNNING)

{

GetCurrentDirectory(256,(LPWSTR)memory);

int result = WriteToLog(memory);

if (result)

{

ServiceStatus.dwCurrentState = SERVICE_STOPPED;

ServiceStatus.dwWin32ExitCode = -1;

SetServiceStatus(hStaus,&ServiceStatus);

return;

}

Sleep(SLEEP_TIME);

}

return;

}

void ControlHandler(DWORD request)

{

switch(request)

{

case  SERVICE_CONTROL_STOP:

WriteToLog("Monitoring stopped");

ServiceStatus.dwWin32ExitCode = 0;

ServiceStatus.dwCurrentState = SERVICE_STOPPED;

SetServiceStatus(hStaus,&ServiceStatus);

return;

case SERVICE_CONTROL_SHUTDOWN:

WriteToLog("Monitoring stopped");

ServiceStatus.dwWin32ExitCode = 0;

ServiceStatus.dwCurrentState = SERVICE_STOPPED;

SetServiceStatus(hStaus,&ServiceStatus);

return;

default:

break;

}

SetServiceStatus(hStaus,&ServiceStatus);

return;

}

//输出到日志文件

int WriteToLog(char * str)

{

FILE *log;

log =  fopen(LOGFILE,"a+");

if (log==NULL)

{

return -1;

}

fprintf(log,"%s\n",str);

fclose(log);

return 0;

}

程序运行生成service_test.exe ,用管理员身份进入到控制台,cd  C:\Windows\system32 然后利用sc.exe工具 sc create service_test binPath= D:\TEST\service_test.exe控制台中会打印出 CreateService 成功。此时进入服务管理手动开启服务

时间: 2024-11-06 06:29:58

C语言实现Windows服务并进行安装部署的相关文章

使用C语言编写windows服务一般框架

原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册,否则会导致服务启动失败.因近期写个服务,其中遇到一些有问题,有部分内容想和大家分享一下,请大家指正. windows服务一般框架代码如下: #include <Windows.h> #include <tchar.h> VOID WINAPI ServiceHandler(DWORD

C# Windows服务开发和安装

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务. Windows服务管理器 在Windows系统中,你可以通过在命令行中输入service

Windows服务创建及安装

我们将研究如何创建一个作为Windows服务的应用程序.内容包含什么是Windows服务,如何创建.安装和调试它们.会用到System.ServiceProcess.ServiceBase命名空间的类.什么是Windows服务? Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合.它没有用户界面,并且也不会产生任何可视输出.任何用户消息都会被 写进Windows事件日志.计算机启动时,服务会自动开始运行.它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环

Linux:多Tomcat服务, 统一安装部署 unifyDeploy0.2版本发布

下载地址:  unifyDeploy0.1版本  unifyDeploy0.2版本 1       引言 基于JAVA开发项目,随着服务的越来越多,配置文件更是眼花缭乱,每次不知道因为配置问题浪费多少时间,更不知道因为配置问题出过多少问题.多台服务器来回切换,如果服务需要依赖,启动更是问题. 1.1 目的 一次修改,统一安装:操作简单,实用高效. 1.2 范围 本项目使用范围包括: 基于JAVA开发项目 项目相关服务繁多 服务启动有依赖关系 1.3 读者 本需求规格说明书的阅读者或其他文档干系人

c# windows服务 一个项目安装多个服务

创建windows服务就不讲解了,其它大神写太多了.这里只写一个项目安装多个服务的教程.如:http://www.cnblogs.com/zzgblog/p/4595839.html 首先按下图创建多个服务.名字大家随意.我用我已经创建好的项目 以我创建为例子,我创建两个服务文件 打开每一个service文件,右键“添加安装程序”. 点击查看如何添加安装程序 通过serviceInstaller1.serviceInstaller1属性中的ServiceName指定安装控件与服务的关系. 最后在

.net windows 服务创建、安装、卸载和调试

原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行. 可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图: 创建window 服务 新建一个wind

基于C#&amp;.net2.0的windows服务创建与安装

起因:一台服务器中部署的程序,停电后未按照计划任务正常启动. 一.创建并配置Windows服务程序 开发工具VS2015 Framework版本2.0 1.新建Windows服务 2.在Service.cs中编写服务程序所需要执行的操作 服务运行时会自动加载Service1中的代码,亦有OnStart(),OnStop(),OnShutdown()方法分别对应服务启动,服务停止和计算机关闭操作. 3.添加安装程序并配置服务属性 3.1在Service.cs中鼠标右键单击,添加安装程序. 3.2配

用c语言编写windows服务

主要是根据从www.vcbase.com上看到的一篇文章来做这个windows服务的.但是这篇文章一些关键代码并没有贴出来,然而有心人根据作者的描述实现了代码,并且完整的贴了出来,地址是在 http://www.2cto.com/kf/201111/111990.html 我创建的是一个空项目,这个默认的应该是控制台项目.服务的主函数是main而不是winmain,要写一个服务首先要初始化一个SERVICE_TABLE_ENTRY 分派表结构体的列表,然后调用StartServiceCtrlDi

Windows服务BAT命令-安装、卸载、启动、停止

1.安装服务 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\WiseMES\MES.WindowsService.exe Net Start AOIService sc config AOIService start= auto pause 2.卸载服务 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u D:\WiseMES\