我编写的windows服务程序可以安装,但安装后无法start,当我启动时弹出一个对话框,说在本地电脑上无法启动您的服务,这是什么原因,不知道有什么办法可以解决,都没start起来所有,还没法调试。

解决方案 »

  1.   

    无法start后面没有注明原因吗?通常是初始化步骤有问题,具体代码。
      

  2.   

    你使用下面的方法,启动服务,每个函数都有出错返回,如果下面的StartService起不起来的时候,去看GetLastErrorSC_HANDLE schService = OpenService(
    schSCManager, // SCManager database
    _pServiceConfig->service_name(),// name of service
    SERVICE_ALL_ACCESS  // desired access
    ); if (schService != NULL) {
    LPCTSTR svc_param[] = {_SVC_START_PWD
    };
    if (!StartService(
    schService,  // handle to service 
    1,           // number of arguments 
    svc_param) )      // no arguments 
    {
    _pLogHelper->winerr("start_thddfw: StartService");
    }
      

  3.   

    先在 startservice 的位置判断是否成功如果失败了 用 GetLastError获取错误号 看看为什么失败
      

  4.   

    我是按照服务的方式写的,我参考的是一个vcbase上的例程
    D:\New Folder\VC知识库文章 - 用 C 语言编写 Windows 服务程序的五个步骤.htm
    这个例程我试验了是很好用的,但是我把例程上的代码格式加入自己的服务程序,安装后服务就无法启动了。我加入的是一个下载的程序
      

  5.   

    我的例程没有用到startservice这个函数
      

  6.   


    我的意思是既然你的服务已经安装好了,那么就可以调用OpenService,StartService这2个函数把服务起起来,就是说你再做个程序,用这2个函数把你的服务起一下,然后看出错代码。
      

  7.   

    我的服务是在命令行手动安装的用的vc的tool: sc
      

  8.   

    你自己再做个测试程序嘛,把下面的代码拷贝到这个测试工程,就可以启动你的服务了,然后调试这个测试程序嘛。
    SC_HANDLE schService = OpenService( 
    schSCManager, // SCManager database 
    _pServiceConfig->service_name(),// name of service 
    SERVICE_ALL_ACCESS // desired access 
    ); if (schService != NULL) { 
    LPCTSTR svc_param[] = {_SVC_START_PWD 
    }; 
    if (!StartService( 
    schService,  // handle to service 
    1,          // number of arguments 
    svc_param) )      // no arguments 
    { }
      

  9.   

    我在Vista里调试系统服务,一直没成功,最后发现是UAC搞的~~~郁闷
      

  10.   

    确定你服务的名字是否正确!!!
    如:我用VC写个程序来起动Secondary Logon服务,但它时得用seclogon!