应用添加为windows服务的问题
我用SC指令将一个自己的应用(普通的应用)添加为服务
可是启动服务的时候,系统提示错误1053:服务没有及时响应启动或控制启动
跪求大师指点啊。。。。。
如何在程序中添加读取以及反馈响应的代码使服务可以正常启动
最好附带简单效率的代码。。
谢谢了。。。
[解决办法]
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_radcon/html/ba72d648-9553-4849-b829-069ad5ea014b.htm
Windows 服务应用程序
发送反馈意见
使用 Microsoft Visual Studio 或 Microsoft .NET Framework SDK,可以通过创建以服务方式安装的应用程序来轻松创建服务。这种类型的应用程序称为 Windows 服务。使用框架功能,可以创建服务,安装服务和启动、停止服务以及用其他方式控制服务的行为。
注意:
Visual Studio 标准版中不提供“Windows 服务”模板及相关功能。
本节内容
Windows 服务应用程序介绍
概述 Windows 服务应用程序、服务的生存期和服务应用程序与其他通用项目类型的差异。
演练:在组件设计器中创建 Windows 服务应用程序
提供在 Visual Basic、Visual C# 和 Visual J# 中创建服务的示例。
服务应用程序编程结构
解释用于服务编程的语言元素。
如何:创建 Windows 服务
描述使用 Windows 服务项目模板创建和配置 Windows 服务的过程。
相关章节
ServiceBase
描述 ServiceBase 类的主要功能,该类用于创建服务。
ServiceProcessInstaller
描述 ServiceProcessInstaller 类的功能,该类与 ServiceInstaller 类一起用来安装和卸载您的服务。
ServiceInstaller
描述 ServiceInstaller 类的功能,该类与 ServiceProcessInstaller 类一起用来安装和卸载您的服务。
监视 Windows 服务
描述如何使用 ServiceController 组件与现有的服务进行交互。
Visual Studio 中的默认项目模板
描述本章中使用的项目类型以及如何对它们进行选择。
部署应用程序和组件
列出主要的部署页以及页中所包含的信息。
发送反馈意见,就此主题向 Microsoft 发送反馈意见。
[解决办法]
#pragma hdrstop#pragma argsused#include<tchar.h>#include<iostream>#include<stdio.h>#include<stdlib.h>#include<conio.h>#include <dos.h>#include<windows.h>using namespace std;HANDLE StopEvent;DWORD WINAPI HandlerEx( __in DWORD dwControl, __in DWORD dwEventType, __in LPVOID lpEventData, __in LPVOID lpContext){ switch(dwControl) { case SERVICE_CONTROL_STOP: SetEvent(StopEvent); case SERVICE_CONTROL_INTERROGATE: case SERVICE_CONTROL_SHUTDOWN: return NO_ERROR; default:return ERROR_CALL_NOT_IMPLEMENTED; }}VOID WINAPI ServiceMain( __in DWORD dwArgc, __in LPTSTR *lpszArgv){ SERVICE_STATUS_HANDLE hServiceStatus;static SERVICE_STATUS Status={SERVICE_WIN32_OWN_PROCESS,SERVICE_RUNNING,SERVICE_ACCEPT_STOP,NO_ERROR,0,500}; StopEvent=CreateEventW(0,0,0,0); hServiceStatus=RegisterServiceCtrlHandlerExW(L"serviceABCDEFG",HandlerEx,0); SetServiceStatus(hServiceStatus,&Status); WaitForSingleObject(StopEvent,INFINITE); Status.dwCheckPoint+=1; Status.dwCurrentState=SERVICE_STOPPED; SetServiceStatus(hServiceStatus,&Status);}int wmain(int argc, _TCHAR* argv[]){ int a,b;static wchar_t FileName[1024];SC_HANDLE scm,srv=0;SERVICE_STATUS Status; SERVICE_TABLE_ENTRYW table={L"serviceABCDEFG",ServiceMain}; if(argc-1) { if(!wcscmp(argv[1],L"service")) { StartServiceCtrlDispatcherW(&table); }else if(!wcscmp(argv[1],L"start")) { scm=OpenSCManagerW(0,0,5); if(scm) { srv=OpenServiceW(scm,L"serviceABCDEFG",SERVICE_START); CloseServiceHandle(scm); } if(srv) { if(StartServiceW(srv,0,0))cout<<"ok"<<endl;else cout<<"failed"<<endl; CloseServiceHandle(srv); }else cout<<"failed"<<endl; }else if(!wcscmp(argv[1],L"stop")) { scm=OpenSCManagerW(0,0,5); if(scm) { srv=OpenServiceW(scm,L"serviceABCDEFG",SERVICE_STOP); CloseServiceHandle(scm); } if(srv) { ControlService(srv,SERVICE_CONTROL_STOP,&Status); CloseServiceHandle(srv); cout<<"ok"<<endl; }else cout<<"failed"<<endl; } }else { cout<<"Press any key to install."<<endl; getch(); *FileName=L'\"'; GetModuleFileNameW(0,FileName+1,768); wcscat(FileName,L"\" service"); scm=OpenSCManagerW(0,0,3); if(scm) { srv=CreateServiceW(scm,L"serviceABCDEFG",0,SERVICE_START,SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START,0,FileName,0,0,0,0,0); CloseServiceHandle(scm); } if(srv) { CloseServiceHandle(srv); cout<<"ok"<<endl; }else cout<<"failed"<<endl; } return 0;}