VC9.0 ATL向导生成 Windows服务,修改启动类型和备注
2009-08-04 13:03
567 查看
class CIMServerModule : public CAtlServiceModuleT< CIMServerModule, IDS_SERVICENAME > { private: CUdpListener m_oUdpListener; public : CIMServerModule() { m_status.dwControlsAccepted |= SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; } DECLARE_LIBID(LIBID_IMServerLib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_IMSERVER, "{87327DB3-313E-43B4-9CA6-139A2F742EDF}") HRESULT InitializeSecurity() throw() { // TODO : Call CoInitializeSecurity and provide the appropriate security settings for // your service // Suggested - PKT Level Authentication, // Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY // and an appropiate Non NULL Security Descriptor. CSecurityDescriptor sd; sd.InitializeFromThreadToken(); HRESULT hr = CoInitializeSecurity( sd , -1 , NULL , NULL , RPC_C_AUTHN_LEVEL_PKT , RPC_C_IMP_LEVEL_IMPERSONATE , NULL , EOAC_NONE , NULL ); return S_OK; } HRESULT PreMessageLoop(int nShowCmd) throw() { HRESULT hr = S_OK; hr = CAtlServiceModuleT<CIMServerModule,IDS_SERVICENAME>::PreMessageLoop(nShowCmd); hr = CoResumeClassObjects(); if (SUCCEEDED(hr)) { if( !m_oUdpListener.Start() ) { RevokeClassObjects(); return E_FAIL; } } return hr; } HRESULT PostMessageLoop() throw() { HRESULT hr = S_OK; hr = CAtlServiceModuleT< CIMServerModule,IDS_SERVICENAME>::PostMessageLoop(); if (SUCCEEDED(hr)) { m_oUdpListener.Stop(); } return hr; } HRESULT RegisterAppId(bool bService=false) { HRESULT hr = S_OK; hr = CAtlServiceModuleT< CIMServerModule,IDS_SERVICENAME>::RegisterAppId(bService); if (!bService) return hr; SC_HANDLE hSCM = NULL; SC_LOCK sclLock = NULL; SC_HANDLE hService = NULL; try { hSCM = ::OpenSCManager(NULL, NULL, GENERIC_WRITE | SC_MANAGER_LOCK); if (hSCM == NULL) { OutputDebugString( _T("Error, OpenSCManager failed.")); hr = E_FAIL; goto lblEnd; } sclLock = LockServiceDatabase(hSCM); if(sclLock == NULL) { OutputDebugString( _T("Error, LockServiceDatabase failed.")); hr = E_FAIL; goto lblEnd; } hService = OpenService( hSCM , m_szServiceName , SERVICE_CHANGE_CONFIG ); if (hService == NULL) { OutputDebugString( _T("Error, OpenService failed.")); hr = E_FAIL; goto lblEnd; } if (! ChangeServiceConfig( hService , SERVICE_WIN32_OWN_PROCESS , SERVICE_AUTO_START , SERVICE_NO_CHANGE , NULL , NULL , NULL , NULL , NULL , NULL , NULL ) ) { OutputDebugString( _T("Error, ChangeServiceConfig failed.")); hr = E_FAIL; goto lblEnd; } SERVICE_DESCRIPTION sdBuf; memset(&sdBuf, 0, sizeof(sdBuf)); sdBuf.lpDescription = _T("呼叫中心即时通信服务"); if( !ChangeServiceConfig2( hService, SERVICE_CONFIG_DESCRIPTION, &sdBuf) ) { OutputDebugString( _T("Error, ChangeServiceConfig2 failed.")); hr = E_FAIL; goto lblEnd; } } catch(...) { OutputDebugString( _T("Error, Unknown exception.")); hr = E_FAIL; goto lblEnd; } lblEnd: if (sclLock) UnlockServiceDatabase(sclLock); if (hService) ::CloseServiceHandle(hService); if (hSCM) ::CloseServiceHandle(hSCM); return hr; } };
安装的批处理:
IMServer.exe -/Service net start IMServer cmd.exe
卸载的批处理
net stop IMServer IMServer.exe /Unregserver
相关文章推荐
- Windows服务用C++代码实现的一些操作-1:修改服务启动类型
- c++写修改Windows服务类型的代码
- windows下安装tomcat服务、修改tomcat启动JVM参数
- windows7系统运行速度提升之服务优化(修改服务的启动类型)
- 孙鑫vc++ 第九课 笔记 修改MFC AppWizard向导生成的框架程序的外观和大小
- Windows服务启动异常 System.ServiceModel.Diagnostics.TraceUtility 的类型初始值设定项引发异常
- 关于tomcat注册成一个服务,并修改启动类型
- 命令行(cmd)修改系统服务启动类型,和启动停止服务
- 使用SC在C#中取得windows服务的启动类型
- 在Windows平台下修改Oracle实例不随服务启动
- [DOS] DOS命令修改后台服务启动类型
- 命令行 SC命令 及通过sc config 更该windows服务的启动类型等
- tomcat内存溢出(修改catalina.bat后windows启动tomcat服务没有效果)
- C++通过WMI启动/停止服务,修改服务类型 (
- 如何用SC获得Windows Service的启动类型,运行状态, 修改启动类型
- MFC/VC下控制windows服务——停止服务,启动服务
- tomcat内存溢出(修改catalina.bat后windows启动tomcat服务没有效果)
- 命令行 SC命令 及通过sc config 更该windows服务的启动类型等
- WMI 远程修改服务启动类型