bao19830224 发表于 2009-11-5 18:36:25

NT Service问题

我想自己写一个NT 服务,用于实现监听接口并接受数据的功能。我改写了ACE/example中的NT_Service的例子,还参考了peakzhang版主的这篇文章

http://www.acejoy.com/bbs/viewthread.php?tid=112

现在已经实现了基本的功能,在NT_Service 的函数start_svc()中启动Service_Config.open()开启静态服务,并监听接口。-s后程序也能正常运行。

但是遇到的问题是我重启电脑以后,在windows服务管理中选择启动服务,客户端都不能正确的连接,查看监听的端口也不在监听中,必须打开控制台 -s 后程序才能正常运行,有没有办法解决这个问题?最好能开机后能自动运行程序而不必手工启动。请大家指点迷津,谢谢

shenming 发表于 2009-11-5 19:12:44

你安装了服务了吗?

一般要安装,在ACE的例子中是 -i,安装后,以后开机才能自动运行啊。

rotar 发表于 2009-11-5 21:33:43

怀疑是服务安装的问题,服务的自动启动看看设置了没有

bao19830224 发表于 2009-11-6 13:58:18

已经 -i 安装过了

bao19830224 发表于 2009-11-6 14:06:47

服务也已经标识 “启动” 是不是还要别的什么设置?

我的start_svc()函数是这样写的

int Service::start_svc(ACE_Time_Value *wait_time,
               DWORD *svc_state ,
               int argc, ACE_TCHAR *argv[])
{
        ACE_DEBUG ((LM_DEBUG,
            ACE_TEXT ("start_svc\n")));
        int ret=inherited::start_svc(0,0,/*argc,argv*/0,0);

        ACE_STATIC_SVC_REGISTER(HA_Status_Descriptor);
        ACE_Service_Config::open(argc,argv,ACE_DEFAULT_LOGGER_KEY,0);
        ACE_Reactor::instance()->run_reactor_event_loop();
        return ret;
}

bao19830224 发表于 2009-11-6 14:36:19

我程序的可执行文件名为Win_NT_Service

现在就是我在控制台执行Win_NT_Service -i 然后在执行Win_NT_Service -s 客户端都能够连接上。然后我重启电脑后,检查计算机管理中服务是开启状态,在任务管理器中也有Win_NT_Service的程序运行,但就是所有客户端都连不上,不知是什么方法解决这个问题?

是不是还要什么设置才能使程序在后台运行?

modern 发表于 2009-11-6 15:02:23

任务管理器,找到Win_NT_Service,右键点击然后选择调试

bao19830224 发表于 2009-11-6 15:23:06

modern版主 我按照你的方法操作,选择调试后让我运行一个VS的新实例,并没有什么实质的变化啊

winston 发表于 2009-11-6 15:31:56

如果服务自动启动时候不能访问,先用telnet xxxx xx测试一下是否能够连接上。如果不能连接,表示你的系统程序有故障,没有正常监听。

bao19830224 发表于 2009-11-9 09:35:10

winston,我telnet果然连接不上,但是我不知道程序那出错误了。我是第一次编写NT服务程序,有些东西不知道是不是理解的准确,我想请问一下系统重启服务自动运行以后,程序的入口点还是start_svc()这个函数吗?
页: [1] 2 3 4
查看完整版本: NT Service问题