能力值:
( LV2,RANK:10 )
|
-
-
2 楼
其实WIN2000的服务也是和普通程序一样,服务只不过是使程序处于挂起的状态,当有响应时处理对应事件,调试时只要直接打开文件就行了,或者attach一下!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢回复!
问题是怎么才能找到合适的位置来下断点呢?服务程序是这样的:当有客户端请求时,服务端查数据库,取与客户机相关的信息,然后返回给客户机,我现在想跟踪这一个处理流程,该怎么下断点呢?
|
能力值:
( LV9,RANK:290 )
|
-
-
4 楼
我很想知道,在用net start 命令启动服务时,他是如何响应net命令的,有没有办法对这个过程进程调试,或是可以在脱离net命令的情况下自身完成启动
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
对于上一个问题,我曾经也碰到过,先静态分析一下主程序,找到在事件处理处,然后启动服务,用OD的ATTACH的功能连上程序,就可以调了,
对于下面的net命令,服务在系统中实际上有一套专用的API,creatservice,启动和停止的也有,你查一下,记不得了!
|
能力值:
(RANK:20 )
|
-
-
6 楼
你看看MSDN里面的service相关的API和service程序的结构。service程序启动时要注册(先StartServiceCtrlDispatcher再RegisterServiceCtrlHandler),提供一个回调函数的表格给服务管理器在适当的时候调用。找到那个表格就行了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
服务程序没有什么难的,主要你要明白几点,其实这些东西反过来想你就会明白为什么这样,假如你是MS 的开发人员,你要为你的customer 提供 Service 这种接口你真么做呢? 如果你这样想就会明白现在的Service 的设计了。
一些心得,仅代表个人的观点:
1、要搞明白SCM 操作函数 和 Service 的控制函数, SCM 操作函数,就好像是你操作数据库一样,添加一个Service,删除一个Service ,打开Service ,其实操作的是注册表而已,不过开发的人员可以认为是操作的是数据库,如果这样你就会明白,那么你在数据库里面家里一个服务,就好像是在数据库的某个表中添加了一条记录一样。 你添加了Service ,不等于Service 会运行,如果要让Service 运行,就要用到Service 的控制函数 。
2、要明白Service 大体是怎么玩的 :)
当
OS其他的时候,在注册表中,也就是所说的SCM 中一次找到每一个服务,处理的代码可能是这样的:
Service = FindFirstService ;
while(Service)
{
Service.RegisterFunction ; //
Service = FindNextService ;
}
每一次找到一个Service ,OS 会给Service 创建一个线程来执行Service ,在Service 的主Thread 中要注册 Service 的处理函数。
OK ,当程序执行到StartServiceCtrlDispatcher 之后,程序会转到所注册的Service 处理函数出运行。
3、业务处理函数中,要注意两个问题,一个是注意想 SCM 报告此时运行的状态,另外一个是向SCM 注册一个回调函数,这个函数,就是SCM 用来控制Service 的一个函数,也就是一些控制消息发送到SCM 的时候,SCM 调用这个控制的回调函数来控制Service ,Service 自己提供这个callback 函数。
.........................
|
|
|