我用ATL创建了一个服务。遇见了这样的问题:
当服务以登陆用户如ADMINISTRATER启动时,可以正常工作。
如果服务以SYSTEM用户启动(即开机启动或从SCM里启动),可以在资源管理器的进程里看到,且分配了内存,但是服务并没有真正工作。
是什么原因呢?有路过的大侠请不吝赐教。非常感谢!

解决方案 »

  1.   

    那说明你的服务并没有正确初始化等,检查一下你的ServiceMain等
      

  2.   

    谢谢回答。
    请问是不是跟我在里面使用了MFC函数有关,ATL支持MFC么?我在前面加了MFC的头文件。
    如果我把使用MFC的部分去掉,就可以正常运行了。如果我要用到MFC里面的东西,我该做哪些动作呢?谢谢
      

  3.   

    有些操作是需要在指定用户下才能成功执行的(比如访问注册表的HKEY_CURRENT_USER),不知道你的服务里有没有包含这些操作.
      

  4.   

    回楼上:根据我调试的结果,应该跟对注册表的访问没有关系。因为我是用ATL向导生成的服务程序,只修改了RUN()的部分,结果是如果用到MFC的类型或函数,就不能在SYSTEM下工作,不用MFC的东西就没有问题。现在的问题就变成了:怎么样在ATL中支持MFC呢?或者有没有别的更好的办法来做一个NT服务程序?
      

  5.   

    调试是程序员的基本技能。把程序多加些错误log,取取错误码,我们相信你可以自己解决的。 麻烦给点分。
      

  6.   

    问题已经解决了。是因为SYSTEM下工作时,所有的东西都应该是系统的,而我的程序里面访问了数据库,那么应该访问系统DSN而不是用户DSN,就是在这里出了问题。