在程序1.exe中使用 hService = CreateService(hServiceMgr,
"a",
                   "a",
          SERVICE_ALL_ACCESS,
SERVICE_WIN32_SHARE_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
"c:\\1.exe",
NULL,
NULL,
NULL,
NULL,
NULL);bStartService = StartService(hService , NULL, NULL);为什么总是失败,提示2001错误,无效的服务。这样自身把自身创建为服务并启动可以么?

解决方案 »

  1.   

    你调用完创建1.exe,那1.exe又创建1.exe。?没写过服务程序,只看了一下
      

  2.   

    你的1.exe本身是服务程序吗?
      

  3.   

    给的信息比较少,不知道具体原因。
    第一:1.exe是不是服务程序啊?因为CreateService是安装服务的,一般情况安装功能既可以和服务程序写在一起,也可以单独写成一个普通程序。
    第二:SERVICE_WIN32_SHARE_PROCESS,你的服务程序是不是真的多个服务共用一个进程?
      

  4.   

    vckbase.com中有创建服务程序的文章。
    楼主也可以搜索一下 service.cpp文件,一个很通用的服务程序模板
      

  5.   


    以下这段是我使用的code
    希望對你有幫助 //打开服务控制管理器
        SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
        if (hSCM == NULL)
        {
            return FALSE;
        }    // Get the executable file path
        TCHAR szFilePath[MAX_PATH];
        ::GetModuleFileName(NULL, szFilePath, MAX_PATH); //创建服务
        SC_HANDLE hService = ::CreateService(
            hSCM, szServiceName, szServiceName,
            SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
            SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
            szFilePath, NULL, NULL, L"", NULL, NULL);    if (hService == NULL)
        {
            ::CloseServiceHandle(hSCM);
            return FALSE;
        } //改变服务描述
    SERVICE_DESCRIPTION Description;
    TCHAR szDescription[1024];
    ZeroMemory(szDescription, 1024);
    ZeroMemory(&Description, sizeof(SERVICE_DESCRIPTION));
    lstrcpy(szDescription, _T("服務的描述."));
    Description.lpDescription = szDescription;
    ::ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &Description);
    //开始服务
    ::StartService(hService,0,NULL);
    ::CloseServiceHandle(hService);
    ::CloseServiceHandle(hSCM);
    把程序自身註冊為服務,自動啟動服務