`

创建Windows系统服务

    博客分类:
  • C++
阅读更多
#include "stdafx.h"
#include <Windows.h>
#include <WinSvc.h>
#include <EventSys.h>
#include <jni.h>
#include  "invoke.h " 


static TCHAR SERVICE_NAME[] = _T("Tomcat7");
static TCHAR DISPLAY_NAME[] =_T("Apache Tomcat 7");
static SERVICE_STATUS js_status;
static SERVICE_STATUS_HANDLE js_status_handle;
static TCHAR prog_name[500];
static bool service_running = false;
const LPWSTR LOG_MSG = L"By Java Service";//L是个宏
void WINAPI JSCtrlHandle(DWORD);//32位系统DWORD位64位,64位系统DWORD为128位,是个逻辑类型

void WINAPI JSCtrlHandle(DWORD opcode)
{
	switch(opcode)
	{
	case  SERVICE_CONTROL_STOP:
		js_status.dwCurrentState = SERVICE_STOPPED;
		js_status.dwCheckPoint = 0;
		js_status.dwWaitHint = 100;
		SetServiceStatus(js_status_handle, &js_status);
		service_running = false;
		break;
	default:
		break;
	}
}

void WINAPI JSMain(DWORD argc,LPTSTR *argv)
{
	
	js_status.dwServiceType = SERVICE_WIN32;
	js_status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
	js_status.dwWin32ExitCode = S_OK;
	js_status.dwServiceSpecificExitCode = 0;

	js_status.dwCurrentState = SERVICE_START_PENDING;
	js_status.dwCheckPoint = 0;
	js_status.dwWaitHint = 0;

	js_status_handle = RegisterServiceCtrlHandler(SERVICE_NAME,JSCtrlHandle);

	if (js_status_handle)
	{
		js_status.dwWin32ExitCode = S_OK;
		js_status.dwCurrentState = SERVICE_RUNNING;
		js_status.dwCheckPoint = 0;
		js_status.dwWaitHint = 0;
		if (SetServiceStatus(js_status_handle,&js_status) != 0)
		{
			service_running = true;
			invokeJava("info/lidongbo/TinyServer");
			js_status.dwCurrentState = SERVICE_STOPPED;
			js_status.dwCheckPoint = 0;
			js_status.dwWaitHint = 0;
			SetServiceStatus(js_status_handle, &js_status);
		}
	}
}
int insJavaService()
{
	TCHAR dir_path[1000];
	GetCurrentDirectory(1000,dir_path);
	_tcscat(dir_path,_T("\\"));
	_tcscat(dir_path,prog_name);
	_tprintf(_T("***********\n"));
	_tprintf(dir_path);
	_tprintf(_T("\n***********\n"));

	TCHAR tomcatPath[1000]=_T("D:\\tomcat6-DumexQS\\bin\\tomcat6.exe");
 

	SC_HANDLE scm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
	SC_HANDLE srv = CreateService(scm,
		
		SERVICE_NAME,DISPLAY_NAME, SERVICE_ALL_ACCESS,
		SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
		tomcatPath,NULL,NULL,NULL,NULL,NULL);
	if (NULL == srv)
	{
		CloseServiceHandle(scm);
		return 1;
	}
	StartService(srv,0,NULL);
	CloseServiceHandle(srv);
	CloseServiceHandle(scm);
	return 0;
}
int unsJavaService()
{
	SC_HANDLE scm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
	SC_HANDLE srv = OpenService(scm,SERVICE_NAME,SERVICE_ALL_ACCESS);
	if (NULL == srv)
	{
		CloseServiceHandle(scm);
		return 1;
	}
	ControlService(srv,SERVICE_CONTROL_STOP,&js_status);
	DeleteService(srv);
	CloseServiceHandle(srv);
	CloseServiceHandle(scm);
	
	return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{	
	
	_tcscpy(prog_name,argv[0]);
	if (argc > 1)
	{
		if (0 == _tcscmp(argv[1],_T("/i")))
		{
			int ret_code = insJavaService();
			if (0 == ret_code)
			{
				_tprintf(_T("Service %s registered!\n"),SERVICE_NAME);
			}else{
				_tprintf(_T("Can't register service %s, error code is %d\n"),SERVICE_NAME,ret_code);
			}
		}
		if (0==_tcscmp(argv[1],_T("/u")))
		{
			int ret_code = unsJavaService();
			if (0 == ret_code)
			{
				_tprintf(_T("Uninstalled Service %s!\n"),SERVICE_NAME);
			}else{
				_tprintf(_T("Can't uninstall service %s, error code is %d\n"),SERVICE_NAME,ret_code);
			}
		}
	}else
	{
		/**
		typedef struct _SERVICE_TABLE_ENTRY {
				LPTSTR                  lpServiceName; 
				LPSERVICE_MAIN_FUNCTION lpServiceProc; 
			} SERVICE_TABLE_ENTRY
			, *LPSERVICE_TABLE_ENTRY;
		*/
		SERVICE_TABLE_ENTRY srvs[] = {
			{	
				SERVICE_NAME,
				JSMain
			},
			{	
				NULL,
				NULL
			}
		};
		StartServiceCtrlDispatcher(srvs);
	}
	return 0;
}
分享到:
评论

相关推荐

    用Delphi创建windows服务程序

    ### 使用 Delphi 创建 Windows 服务程序 在 IT 领域中,Windows 服务是一种特殊类型的后台应用程序,它可以在没有用户交互的情况下运行。这类服务通常用于执行关键任务或长期运行的任务,例如数据库服务、网络服务...

    创建Windows服务程序

    `sc`命令是Windows系统提供的服务控制管理器,可以用来创建、查询、控制和删除服务。以下是一些基本的`sc`命令示例: 1. 创建服务:`sc create ServiceName binPath= "PathToExe" DisplayName= "Service Display ...

    C#创建Windows系统服务及实例工程

    本教程将深入讲解如何使用C#语言创建Windows系统服务,并通过一个实例工程来帮助理解这一过程。 首先,我们需要了解Windows服务的基本概念。Windows服务是Windows操作系统的一部分,它允许开发者创建在系统启动时...

    C++创建window服务

    Windows服务是指可以在操作系统启动后自动运行的应用程序或进程,它们无需用户登录即可执行任务。常见的服务包括目录复制、进程监控以及提供网络服务等功能。 #### 三、创建Windows服务的关键步骤 1. **定义服务类*...

    C#创建windows服务+Form+Web调用服务

    在IT领域,Windows服务是一种在后台运行的程序,它不受用户界面的影响,可以在系统启动时自动启动,并且能够持续运行,通常用于执行计划任务或提供持续的服务。C#作为.NET框架的主要编程语言,提供了丰富的API来创建...

    vs2008创建Windows服务用于后台运行

    在IT行业中,Windows服务是一种特殊的程序,它可以在没有用户交互的情况下在Windows操作系统后台持续运行。Visual Studio 2008(VS2008)提供了一个强大的开发环境,支持创建这样的服务应用程序。本文将深入探讨如何...

    通过VC创建WINDOWS服务程序

    总结来说,通过VC创建Windows服务程序,不仅可以让程序在用户登录之前或不需用户交互的情况下运行,还可以提高系统的稳定性和安全性。了解并掌握这一技能,对于开发系统级应用或后台服务程序的开发者而言至关重要。

    创建Windows系统服务demo2(c++版)

    本示例将探讨如何使用C++来创建Windows系统服务。 首先,我们需要了解几个关键的Windows API函数: 1. **CreateService**: 这个函数用于创建一个新的服务项在服务控制管理器数据库中。你需要提供服务的显示名称、...

    创建Windows服务

    创建Windows服务是为了让特定的应用程序或功能能够持续运行,即使没有用户交互也依然能正常工作。本文将详细介绍如何创建、配置和安装Windows服务。 首先,创建一个新的Windows服务项目。在Visual Studio中,可以...

    win7下创建windows系统服务

    下面我们将详细探讨如何在Win7环境下创建Windows系统服务,以及涉及的相关技术点。 1. **服务的基本概念**: - Windows服务是具有特定功能的独立应用程序,通常在后台运行,不受用户交互影响。 - 服务可以设置为...

    VS2017创建运行Windows服务程序

    VS2017 创建运行 Windows 服务程序 在本篇文章中,我们将详细介绍如何使用 VS2017 创建和运行 Windows 服务程序。Windows 服务是 Windows 操作系统中的一种特殊程序,它可以在后台运行,提供一些特殊的功能。下面,...

    C#创建Windows服务(Windows Services) 实战之系统定时重启服务-程序开发

    ### C# 创建 Windows 服务:实现系统定时重启功能 在 IT 领域,Windows 服务(Windows Services)是后台运行的应用程序,它们为用户提供了一系列关键功能,如网络连接、打印服务等。与传统的应用程序不同,Windows ...

    vc创建windows服务

    找了n多据说是创建windows服务的vc代码,发现了n多问题。大多数无法应用于生产环境。此外。大部分代码,冗长不直观。 这次通过挖掘filezilla,找到了一部分filezilla控制windows服务的代码。感觉还是太长,不直观。...

    C#创建Windows服务简单实例

    Windows服务可以独立于用户交互运行,这使得它们成为处理系统级任务的理想选择。下面将详细介绍如何使用C#来创建一个简单的Windows服务。 首先,你需要在Visual Studio中创建一个新的项目。选择"Windows服务"模板,...

    创建windows服务程序的demo

    综上所述,"创建windows服务程序的demo"是一个C++项目,用于演示如何使用Windows API在Windows操作系统中创建、管理和控制服务。通过学习和实践这个示例,开发者可以深入理解Windows服务的工作原理,并能创建自己的...

    C# 创建windows服务源码

    在IT领域,Windows服务是一种特殊的后台应用程序,它们在没有用户界面的情况下运行,通常在系统启动时启动,并且可以在用户登录之前或之后持续运行。在C#编程语言中,创建Windows服务是一个常见的需求,用于实现一些...

    使用C#创建Windows服务 并发布Windows 服务.docx

    ### 使用C#创建Windows服务及发布Windows服务 #### 一、开发环境配置 为了确保能够顺利地进行Windows服务的开发与部署,首先需要准备好合适的开发环境。本案例中所使用的开发环境包括: - **操作系统**:Windows ...

    利用Java创建Windows服务

    然而,在Windows系统上创建服务,我们通常会借助第三方库,如Apache Commons Daemon或winsw。 Apache Commons Daemon是一个开源项目,提供了Java程序作为Windows服务运行的工具,包括JaWin和Procrun。JaWin是Java...

    使用C#创建Windows服务

    在本文中,我们将深入探讨如何使用C#编程语言来创建Windows服务。 首先,理解C#的基础是必要的。C#是一种面向对象的编程语言,由微软公司开发,主要用于.NET框架。它具有丰富的特性和强大的功能,使得开发Windows...

Global site tag (gtag.js) - Google Analytics