vb生成的exe 注册成系统服务后,如何在windows的'服务管理器'中不让别人结束自己的服务.就像卡巴一样,停止和暂停按钮是灰的.

nanfei01055 2008-10-08 11:55:42
如题,我目前用的是NtService(NTSVC.ocx)控件,如果该控件可以设置,就更好了.
...全文
415 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengboming 2012-03-09
  • 打赏
  • 举报
回复
学习学习
nanfei01055 2008-10-21
  • 打赏
  • 举报
回复
这段时间太忙,长时间没结贴.问题已经解决了,注册服务仍然是用这个控件,禁止关闭我用的是HookApi,谢谢各位顶贴!
lyserver 2008-10-15
  • 打赏
  • 举报
回复
如楼上所说,两个办法,一个是创建服务时,传入给服务的参数不加SERVICE_ACCEPT_STOP就行了,二是如果用API写的,就算加了SERVICE_ACCEPT_STOP标志,但不实现也一样结束不了。
现在还是人类 2008-10-14
  • 打赏
  • 举报
回复
用VB调用API写NT服务程序会有不稳定的现象,所以微软才出了NTSVC.ocx来弥补这个问题。
但微软仍然不建议用VB写NT服务程序。
如果要用VB做NT服务程序,用NTSVC.ocx是最好的选择,自己用API写,其实也很容易,因为
很多VC对这方面的范例可以参考,但是用在VB里就不见得那么稳定了。所以使用控件实现是正
确的。
还有,你的问题和NT服务程序的实现是无关的,关键点在于NT服务注册时CreateService函数
的dwDesiredAccess参数设置,如果你仔细看一下就明白为什么了。
nanfei01055 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lyserver 的回复:]
你要用P-CODE进行编译,我记得贴子里已经作了说明
[/Quote]

编译为p-code问题依然没变,算了我还是用控件吧?
lyserver 2008-10-10
  • 打赏
  • 举报
回复
至于不让别人结束,你可以修改SendStatusToSCM里的接受值.
lyserver 2008-10-10
  • 打赏
  • 举报
回复
你要用P-CODE进行编译,我记得贴子里已经作了说明
nanfei01055 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhouweizhu 的回复:]
这里有个外国人写的不用ntsvc.ocx的服务程序的例子
http://www.smsoft.ru/en/ntservice.htm
[/Quote]

这个例子我已经看过,但似乎不能完成我想要的功能,不过谢谢.
nanfei01055 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lyserver 的回复:]
用纯VB实现稳定的NT服务的代码我已写好,由于有点长,我放到了我的博客里,地址:http://blog.csdn.net/lyserver。欢迎大家指正!
[/Quote]

你写的服务是可以注册,但在服务管理器里一点启动,程序启动后就直接崩溃了.
nanfei01055 2008-10-09
  • 打赏
  • 举报
回复
我下载了一个api安装,删除,停止和启动服务的程序,但不能被'服务管理器'接管,在'服务管理器'中点启动时提示:
错误:1053
服务没有及时响应启动或控制请求.


但服务的确被启动了,关闭这个错误提示框,服务也就被关闭了.
lyserver 2008-10-09
  • 打赏
  • 举报
回复
用纯VB实现稳定的NT服务的代码我已写好,由于有点长,我放到了我的博客里,地址:http://blog.csdn.net/lyserver。欢迎大家指正!
zhouweizhu 2008-10-09
  • 打赏
  • 举报
回复
这里有个外国人写的不用ntsvc.ocx的服务程序的例子
http://www.smsoft.ru/en/ntservice.htm
东方之珠 2008-10-08
  • 打赏
  • 举报
回复
http://www.baidu.com/s?ie=gb2312&bs=vb%CA%B5%CF%D6%BD%F8%B3%CC%B1%A3%BB%A4&sr=&z=&cl=3&f=8&tn=baidu&wd=VB%CC%E1%C9%FD%C8%A8%CF%DE%CE%AASystem+Thread+%CA%B5%CF%D6%BD%F8%B3%CC%B1%A3%BB%A4&ct=0
东方之珠 2008-10-08
  • 打赏
  • 举报
回复
http://hi.baidu.com/soft530/blog/item/fb5945f09623c4c27931aa4a.html
http://zhidao.baidu.com/question/25273467.html
lyserver 2008-10-08
  • 打赏
  • 举报
回复
核心代码如下:
Sub Handler(ByVal dwOpcode As Long)
Select Case dwOpcode
Case SERVICE_CONTROL_STOP '此处原来是处理停止消息的,不作处理
Case SERVICE_CONTROL_PAUSE
Case SERVICE_CONTROL_CONTINUE
Case SERVICE_CONTROL_INTERROGATE
Case SERVICE_CONTROL_SHUTDOWN '在关机时写停止处理
'...
Case Else
End Select

End Sub
lyserver 2008-10-08
  • 打赏
  • 举报
回复
别用人家的控件,自己写服务,很简单,在要求服务停止的消息里不作处理,只返回状态。
现在还是人类 2008-10-08
  • 打赏
  • 举报
回复
注册程序成为NT服务程序我知道的有两种方法:
1、通过WMI来注册
2、用API来注册

API的话注意CreateService的dwDesiredAccess参数设置
现在还是人类 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nanfei01055 的回复:]
引用 1 楼 lyserver 的回复:
别用人家的控件,自己写服务,很简单,在要求服务停止的消息里不作处理,只返回状态。


能否给个完整代码,找了大半天,下载下来的都有好多模块,有点乱,没看太懂.
[/Quote]

你的问题关键是在注册服务的时候怎么注册的,和控件无关
现在还是人类 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lyserver 的回复:]
核心代码如下:
Sub Handler(ByVal dwOpcode As Long)
Select Case dwOpcode
Case SERVICE_CONTROL_STOP '此处原来是处理停止消息的,不作处理
Case SERVICE_CONTROL_PAUSE
Case SERVICE_CONTROL_CONTINUE
Case SERVICE_CONTROL_INTERROGATE
Case SERVICE_CONTROL_SHUTDOWN '在关机时写停止处理
'...
Case Else
End Select

End Sub
[/Quote]
看看这里
http://support.microsoft.com/kb/175948/zh-cn

NT服务在VB6中,用NTSVC.ocx就好了,用VB写不是很稳定的。
crazyxf 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lyserver 的回复:]
等一会,我给你写个.
[/Quote]
老大给我也发一份,crazyxf@yahoo.com.cn,谢谢了。
加载更多回复(2)

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧