zoukankan      html  css  js  c++  java
  • 使服务程序像模像样

    写windows的服务程序当然算不上什么高级编程,但是一般人可能不太注意服务程序的形象问题。打开服务管理器,服务名称就是程序名,更没有描述。看起来挺别扭。起始要使服务好看一点,只需要几步即可(以VC6为例):

    1. 将原来Install函数的CreateService调用改为

        SC_HANDLE hService = ::CreateService(
            hSCM,      // SC_HANDLE hSCManager,        handle to service control manager database  
            m_szServiceName,   // LPCTSTR   lpServiceName,     pointer to name of service to start       
            _T("世纪德润看护服务"),  // LPCTSTR   lpDisplayName,     pointer to display name                   
            SERVICE_ALL_ACCESS,   // DWORD     dwDesiredAccess,   type of access to service               
            SERVICE_WIN32_OWN_PROCESS, // DWORD     dwServiceType,     type of service                         
            SERVICE_AUTO_START,   // DWORD     dwStartType,       when to start service                   
            SERVICE_ERROR_NORMAL,  // DWORD     dwErrorControl,    severity if service fails to start      
            szFilePath,     // LPCTSTR   lpBinaryPathName,  pointer to name of binary file        
            NULL,      // LPCTSTR   lpLoadOrderGroup,  pointer to name of load ordering group
            NULL,      // LPDWORD   lpdwTagId,         pointer to variable to get tag identifier 
            _T("RPCSS/0"),    // LPCTSTR   lpDependencies,    pointer to array of dependency names    
            NULL,      // LPCTSTR   lpServiceStartName,pointer to account name of service  
            NULL);      // LPCTSTR   lpPassword         pointer to password for service account 

    在::CloseServiceHandle(hSCM);以前添加:

      // Need to acquire database lock before reconfiguring.
      SC_LOCK sclLock = LockServiceDatabase(hSCM);
      if (sclLock != NULL)
      {
       // Open a handle to the service.
       SC_HANDLE hService = OpenService( 
        hSCM,     // SCManager database 
        m_szServiceName,  // name of service 
        SERVICE_CHANGE_CONFIG); // need CHANGE access
    
       if (hService != NULL)
       {
        SERVICE_DESCRIPTION sdBuf;
        sdBuf.lpDescription = _T("提供北京世纪德润科技有限公司服务程序的看护服务。");
        if (ChangeServiceConfig2 (
         hService, SERVICE_CONFIG_DESCRIPTION, &sdBuf))
        {
        // MessageBox(NULL, "Change SUCCESS", "", MB_SERVICE_NOTIFICATION); 
        }
        CloseServiceHandle(hService);
       }
       UnlockServiceDatabase(sclLock);
      }   

    这就改了服务名称,添加了服务描述。

    至于对于VS2003及以上,我喜欢从库里面拎出来相关部分,然后修改,类似于:

    template <class T, UINT nServiceNameID>
    class ATL_NO_VTABLE CDRAtlServiceModuleT : public CAtlExeModuleT<T>
  • 相关阅读:
    OpenFlow 消息
    Revolving Digits
    Tavas and Malekas
    Prefixes and Suffixes
    快速构造后缀自动机
    REBXOR
    BZOJ3689 异或之
    BZOJ3689 异或之
    最长路径异或和
    BZOJ 1355 [Baltic2009] Bazinga
  • 原文地址:https://www.cnblogs.com/dabbler/p/5173298.html
Copyright © 2011-2022 走看看