我用vc++6.0自动生成了一个服务程序,我什么都没有改动,我的操作是new-->project-->ATL Com AppWizard-->Service(Exe)-->完成,然后我只是在run函数里面写了我要做的操作,直接双击运行,很正常,可以实现我要的功能,可是我注册成服务之后,通过服务管理器就启动不起来了,启动的时候报告1053错误。不知道这是怎么回事,我除了改了run函数,其它的什么都没有改啊,是不是默认生成的这些代码还有什么别的地方要改啊。

解决方案 »

  1.   

    inline void CServiceModule::Start()
    {
        SERVICE_TABLE_ENTRY st[] =
        {
            { m_szServiceName, _ServiceMain },
            { NULL, NULL }
        };
        if (m_bService && !::StartServiceCtrlDispatcher(st))
        {
            m_bService = FALSE;
        }
        if (m_bService == FALSE)
            Run();
    }void CServiceModule::Run()
    {
        _Module.dwThreadID = GetCurrentThreadId();    HRESULT hr = CoInitialize(NULL);
    //  If you are running on NT 4.0 or higher you can use the following call
    //  instead to make the EXE free threaded.
    //  This means that calls come in on a random RPC thread
    //  HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);    _ASSERTE(SUCCEEDED(hr));    // This provides a NULL DACL which will allow access to everyone.
        CSecurityDescriptor sd;
        sd.InitializeFromThreadToken();
        hr = CoInitializeSecurity(sd, -1, NULL, NULL,
            RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
        _ASSERTE(SUCCEEDED(hr));    hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE);
        _ASSERTE(SUCCEEDED(hr));    LogEvent(_T("Service started"));
        if (m_bService)
            SetServiceStatus(SERVICE_RUNNING);
        MSG msg;
    //*

        while (GetMessage(&msg, 0, 0, 0))
            DispatchMessage(&msg);
    //*/
        _Module.RevokeClassObjects();    CoUninitialize();
    }
    //都是vc自动生成的,我都没有改,可就是启动不起来,我把我自己写的代码都去掉了,还是不行。
      

  2.   

    一般是因为服务启动的时候,执行启动代码有错误,检查你的程序入口和run函数
      

  3.   

    你的服务是不是有依附关系?如果你依附的服务没有的话你的服务是启动不了的。看看CreateService函数的第十一个参数是不是NULL