在XP+SP2后这样干就不行了,除非你也LOCAL SYSTEM帐号运行。

解决方案 »

  1.   

    服务进程本就不能直接关闭
    传入参数Service注册服务,传入参数UnregServer卸载服务
      

  2.   

    CreateToolhelp32Snapshot
    Process32First
    Process32Next
    OpenProcess
    TerminateProcess
    按这个顺序关!
      

  3.   

    如果设置了DEBUG优先级,OpenProcess是没有问题的。
      

  4.   

    CreateToolhelp32Snapshot
    Process32First
    Process32Next
    OpenProcess
    TerminateProcess
    按这个顺序关!我就是按这个顺序的啊!另外,大家是不是认为主要是权限的问题?
      

  5.   

    // 关闭该进程
      TerminateProcess(hp, 1);orz...
    这个方式粗暴了点吧?感觉你走错路了......
    如果服务程序本身是你自己写的,我觉得你应该首先调用服务程序本身的stop命令去停止,停了再搞掉它啊
    当然你服务程序自己也要支持服务停止这个命令
      

  6.   

    先用任务管理器看看这个进程的账户是什么,是不是system。这个错误肯定是属于安全性的问题。不过,我觉得你这样直接喀喳掉它不是一个好方案。
      

  7.   

    服务程序应该不能用这种方式关闭,只能用和服务相关的API来先关闭服务。
      

  8.   

    ls的你看错了,lz是服务启动的时候额外启动了一个process。服务关闭的时候他要关闭这个process。
      

  9.   

    感觉似乎应该给要关闭的进程发送msg来进行关闭动作
    从这个方面考虑下,也许能够解决
      

  10.   

    PostThreadMessage是个不错的方案。或者用EVENT Object等等。最好不要直接喀喳。
      

  11.   

    感谢各位大侠!关于:PostThreadMessage是个不错的方案。或者用EVENT Object等等。最好不要直接喀喳。
    引出另外一个问题:就是如何通过进程的HANDLE知道该进程的Windows Handle也就是HWND,因为,调用PostThreadMessage发送消息,必须知道其HWND。
      

  12.   

    进程有没有窗口的,有就根据窗口名FindWindow找出其句柄
      

  13.   

    进程有没有窗口的,有就根据窗口名FindWindow找出其句柄。除此之外,没有其他方法吗?
      

  14.   

    这应该是安全性问题吧,有没有试过提升token权限,只有提升这个权限才能正常openprocess服务进程.