请问为什么在服务程序里面安装日志钩子会失败???????????????????????
http://community.csdn.net/Expert/topic/3699/3699043.xml?temp=.791073
-------------------------------------------------------------------------
在dll中用EnableHook()启动钩子程序~h_Hook = SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)KeyHookProc,DllHinst,0);在一般exe里面都可以成功Enable可是在把exe程序做成服务以后,在enable就不行了~在服务里面调用dll,获得EnableHook函数入口也是正确的,只是EnableHook函数老是返回钩子安装失败的信息请问为什么?是日子钩子的缘故还是其他缘故??写写了~
http://community.csdn.net/Expert/topic/3699/3699043.xml?temp=.791073
-------------------------------------------------------------------------
在dll中用EnableHook()启动钩子程序~h_Hook = SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)KeyHookProc,DllHinst,0);在一般exe里面都可以成功Enable可是在把exe程序做成服务以后,在enable就不行了~在服务里面调用dll,获得EnableHook函数入口也是正确的,只是EnableHook函数老是返回钩子安装失败的信息请问为什么?是日子钩子的缘故还是其他缘故??写写了~
2. The service may be running under a limited-rights account which does not have permissions to install a system hook.There may be other issues here, but I don't know of any. However, I'm not an expert on the intracies of Windows services.
有几个前提:
1、钩子必须安装在特定的桌面(Desktop)上
2、桌面位于窗口站(WindowStation)内
3、线程可以与一个桌面关联,进程可以与一个窗口站关联
4、只有 WinSta0 窗口站是可见的
3、服务程序如果没有配置为可交互式的服务,则其关联的窗口站是不可见的(也即并非 WinSta0)
系统默认创建了 3 个桌面于 WinSta0 窗口站上,分别为 WinLogon 用于用户登录的桌面(也就是显示登录对话框的那个桌面);Default 用于登录用户交互的桌面和 ScreenSaver 用于运行屏保程序的桌面。
你的工作要想成功,有两种选择:
1、将服务注册为可交互的服务
2、自己设置服务程序的窗口站以及桌面
但又都有其他的一些小问题需要注意。如果采用 1,好处是比较简单,但好像微软已经不太提倡可交互的服务程序;如果采用 2,好处是灵活,但需要自己考虑用户登录后切换线程的桌面,而且成功需要大量的调试工作,因为有无数的文档中语焉不详的陷阱。
两种办法共有的问题是:在 XP 及以后的系统里,对于使用了了快速用户切换的机器,你仍然无法完全达到你的目的,这是操作系统的限制,不可逾越。
祝你好运。
请楼主检查是当前运行的桌面是否可以安装WH_JOURNALRECORD类型的勾子。
我在exe里面都正常的~