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 后程序才能正常运行,有没有办法解决这个问题?最好能开机后能自动运行程序而不必手工启动。请大家指点迷津,谢谢
你安装了服务了吗?
一般要安装,在ACE的例子中是 -i,安装后,以后开机才能自动运行啊。 怀疑是服务安装的问题,服务的自动启动看看设置了没有 已经 -i 安装过了 服务也已经标识 “启动” 是不是还要别的什么设置?我的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;
} 我程序的可执行文件名为Win_NT_Service
现在就是我在控制台执行Win_NT_Service -i 然后在执行Win_NT_Service -s 客户端都能够连接上。然后我重启电脑后,检查计算机管理中服务是开启状态,在任务管理器中也有Win_NT_Service的程序运行,但就是所有客户端都连不上,不知是什么方法解决这个问题?
是不是还要什么设置才能使程序在后台运行? 任务管理器,找到Win_NT_Service,右键点击然后选择调试 modern版主 我按照你的方法操作,选择调试后让我运行一个VS的新实例,并没有什么实质的变化啊 如果服务自动启动时候不能访问,先用telnet xxxx xx测试一下是否能够连接上。如果不能连接,表示你的系统程序有故障,没有正常监听。 winston,我telnet果然连接不上,但是我不知道程序那出错误了。我是第一次编写NT服务程序,有些东西不知道是不是理解的准确,我想请问一下系统重启服务自动运行以后,程序的入口点还是start_svc()这个函数吗?