#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 服务程序 在 IT 领域中,Windows 服务是一种特殊类型的后台应用程序,它可以在没有用户交互的情况下运行。这类服务通常用于执行关键任务或长期运行的任务,例如数据库服务、网络服务...
`sc`命令是Windows系统提供的服务控制管理器,可以用来创建、查询、控制和删除服务。以下是一些基本的`sc`命令示例: 1. 创建服务:`sc create ServiceName binPath= "PathToExe" DisplayName= "Service Display ...
本教程将深入讲解如何使用C#语言创建Windows系统服务,并通过一个实例工程来帮助理解这一过程。 首先,我们需要了解Windows服务的基本概念。Windows服务是Windows操作系统的一部分,它允许开发者创建在系统启动时...
Windows服务是指可以在操作系统启动后自动运行的应用程序或进程,它们无需用户登录即可执行任务。常见的服务包括目录复制、进程监控以及提供网络服务等功能。 #### 三、创建Windows服务的关键步骤 1. **定义服务类*...
在IT领域,Windows服务是一种在后台运行的程序,它不受用户界面的影响,可以在系统启动时自动启动,并且能够持续运行,通常用于执行计划任务或提供持续的服务。C#作为.NET框架的主要编程语言,提供了丰富的API来创建...
在IT行业中,Windows服务是一种特殊的程序,它可以在没有用户交互的情况下在Windows操作系统后台持续运行。Visual Studio 2008(VS2008)提供了一个强大的开发环境,支持创建这样的服务应用程序。本文将深入探讨如何...
总结来说,通过VC创建Windows服务程序,不仅可以让程序在用户登录之前或不需用户交互的情况下运行,还可以提高系统的稳定性和安全性。了解并掌握这一技能,对于开发系统级应用或后台服务程序的开发者而言至关重要。
本示例将探讨如何使用C++来创建Windows系统服务。 首先,我们需要了解几个关键的Windows API函数: 1. **CreateService**: 这个函数用于创建一个新的服务项在服务控制管理器数据库中。你需要提供服务的显示名称、...
创建Windows服务是为了让特定的应用程序或功能能够持续运行,即使没有用户交互也依然能正常工作。本文将详细介绍如何创建、配置和安装Windows服务。 首先,创建一个新的Windows服务项目。在Visual Studio中,可以...
下面我们将详细探讨如何在Win7环境下创建Windows系统服务,以及涉及的相关技术点。 1. **服务的基本概念**: - Windows服务是具有特定功能的独立应用程序,通常在后台运行,不受用户交互影响。 - 服务可以设置为...
### C# 创建 Windows 服务:实现系统定时重启功能 在 IT 领域,Windows 服务(Windows Services)是后台运行的应用程序,它们为用户提供了一系列关键功能,如网络连接、打印服务等。与传统的应用程序不同,Windows ...
Windows服务可以独立于用户交互运行,这使得它们成为处理系统级任务的理想选择。下面将详细介绍如何使用C#来创建一个简单的Windows服务。 首先,你需要在Visual Studio中创建一个新的项目。选择"Windows服务"模板,...
综上所述,"创建windows服务程序的demo"是一个C++项目,用于演示如何使用Windows API在Windows操作系统中创建、管理和控制服务。通过学习和实践这个示例,开发者可以深入理解Windows服务的工作原理,并能创建自己的...
在IT领域,Windows服务是一种特殊的后台应用程序,它们在没有用户界面的情况下运行,通常在系统启动时启动,并且可以在用户登录之前或之后持续运行。在C#编程语言中,创建Windows服务是一个常见的需求,用于实现一些...
### 使用C#创建Windows服务及发布Windows服务 #### 一、开发环境配置 为了确保能够顺利地进行Windows服务的开发与部署,首先需要准备好合适的开发环境。本案例中所使用的开发环境包括: - **操作系统**:Windows ...
在本文中,我们将深入探讨如何使用C#编程语言创建Windows服务,并结合System.Timers.Timer类实现定时任务。这个实例不仅提供了源代码,还通过截图帮助理解每个步骤,这对于初学者和开发者来说是一份宝贵的资源。 ...
在本文中,我们将深入探讨如何使用C#编程语言来创建Windows服务。 首先,理解C#的基础是必要的。C#是一种面向对象的编程语言,由微软公司开发,主要用于.NET框架。它具有丰富的特性和强大的功能,使得开发Windows...
掌握C#创建Windows服务是提升系统级编程能力的重要一步。理解服务的工作原理,学会如何编写、安装和管理服务,将有助于开发出更加稳定、高效的后台应用。提供的压缩包“C#创建Windows服务(代码+说明文档)”应该包含...
VC++2013创建Windows服务的完整代码: 网络上很多VC创建Windows服务的代码都是基于VC6进行的,已经太过老旧,没有太大的参考价值。 本资源是基于VC2013创建的Windows服务的完整示例,具有较高的参考价值。 [VC2013]...