请问怎么在 “控制面板-管理工具->服务” 添加/删除 服务

解决方案 »

  1.   

    用CreateService,具体请参考MSDN中的例子。
      

  2.   

    注册表中服务的注册项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<AppName>\Parameters
    BOOL CNTService::Install()
    {
        // Open the Service Control Manager
        SC_HANDLE hSCM = ::OpenSCManager(NULL, // local machine
                                         NULL, // ServicesActive database
                                         SC_MANAGER_ALL_ACCESS); // full access
        if (!hSCM) return FALSE;    // Get the executable file path
        char szFilePath[_MAX_PATH];
        ::GetModuleFileName(NULL, szFilePath, sizeof(szFilePath));    // Create the service
        SC_HANDLE hService = ::CreateService(hSCM,
                                             m_szServiceName,
                                             m_szServiceName,
                                             SERVICE_ALL_ACCESS,
                                             SERVICE_WIN32_OWN_PROCESS,
                                             SERVICE_AUTO_START,        // 自动启动
                                             SERVICE_ERROR_NORMAL,
                                             szFilePath,
                                             NULL,
                                             NULL,
                                             NULL,
                                             NULL,
                                             NULL);
        if (!hService) {
            ::CloseServiceHandle(hSCM);
            return FALSE;
        }
        // make registry entries to support logging messages
        // Add the source name as a subkey under the Application
        // key in the EventLog service portion of the registry.
        char szKey[256];
        HKEY hKey = NULL;
        strcpy(szKey, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\");
        strcat(szKey, m_szServiceName);
        if (::RegCreateKey(HKEY_LOCAL_MACHINE, szKey, &hKey) != ERROR_SUCCESS) {
            ::CloseServiceHandle(hService);
            ::CloseServiceHandle(hSCM);
            return FALSE;
        }    // Add the Event ID message-file name to the 'EventMessageFile' subkey.
        ::RegSetValueEx(hKey,
                        "EventMessageFile",
                        0,
                        REG_EXPAND_SZ, 
                        (CONST BYTE*)szFilePath,
                        strlen(szFilePath) + 1);         // Set the supported types flags.
        DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;
        ::RegSetValueEx(hKey,
                        "TypesSupported",
                        0,
                        REG_DWORD,
                        (CONST BYTE*)&dwData,
                         sizeof(DWORD));
        
    //添加服务说明:Description
    strcpy(szKey, "SYSTEM\\CurrentControlSet\\Services\\");
        strcat(szKey, m_szServiceName);
        if (::RegCreateKey(HKEY_LOCAL_MACHINE, szKey, &hKey) != ERROR_SUCCESS) {
            return FALSE;
        }
    ::RegSetValueEx(hKey,
                        "Description",
                        0,
                        REG_SZ,
                        (LPBYTE) m_szDescription,
                        strlen(m_szDescription) + 1);

    ::RegCloseKey(hKey);    LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_INSTALLED, m_szServiceName);    // tidy up
        ::CloseServiceHandle(hService);
        ::CloseServiceHandle(hSCM);
        return TRUE;
    }