当前位置:编程学习 > C#/ASP.NET >>

如何实现关闭进程需要密码?或者隐藏进程?

   需求:c#开发的软件给了客户后,客户那边总有人手贱通过任务管理器把该进程给结束掉!已经无法再客户方面杜绝此类状况的发生了!所以客户要求软件通过进程关闭时需要密码,或者隐藏了进程,通过执行bat文件命令结束进程(ps:那些手贱的家伙只会使用任务管理器的水平,但是区分的出来哪些是系统进程,哪些不是。)
   问题:保护进程无法用任务管理器关闭 实现了,但是!但是不能对应64位的系统!!!法克!
         双进程互相守护也试过了,客户不愿意再多一个exe进程!
         目前来看
    1.关闭程序进程时,需要密码。这是最佳方案!但是网路上一直没有找到资料,有好心人给个地址也是好的!
    2.进程隐藏掉,只要无法通过任务管理器查看到就行!网上看到实例了,但是我一直木有实现!求指导!或者试验过可用的代码,链接等。
    3.进程不可通过任务管理器关闭,但是可以通过命令等方式关闭。前边说了64位我没有研究出来如何对应,求指导!  

   求天求地求大神,过往神仙看一看。再三感谢您的关注! 进程守护 进程隐藏 隐藏进程 关闭密码 进程关闭密码 --------------------编程问答-------------------- 谢谢!谢谢!我谢谢!诚挚感谢那些百忙之中能关注我帖子的好心人!!!好心人还不出现呢? --------------------编程问答-------------------- 我认为这是一个较为普遍的应用方法,您的答案应该会帮助很多人, --------------------编程问答-------------------- 最简单的方法……搞一个名字低调的守护进程…… --------------------编程问答--------------------
引用 3 楼 baysos 的回复:
最简单的方法……搞一个名字低调的守护进程……

之前搞了,客户不满意。
亲,关闭进程需要密码有木有资源或者思路!!! --------------------编程问答-------------------- 看看这个
http://social.msdn.microsoft.com/Forums/en-US/6ab0ffce-45ce-444a-ae0a-933c9b6985d6/hide-from-task-managers-processes-tab

或者其实你可以考虑加个守护进程,名字就叫svchost.exe,反正任务管理器里面这东西多的要死,他敢杀就让他杀好了。

其实这东西你就让客户自己想办法解决就对了,指定规章制度或者网管把他们的admin权限收回还是别的什么,反正这是他们的问题。
你可以想象一下下面这个场景:
当你的客户怒气冲冲的打电话质问你们的支持人员
“你们交给我的是什么TM垃圾程序!!!为什么我从后台把它杀死了,它就不工作了???!!!垃圾!!!”
客服:“-_-#(要不是老子还要靠这个吃饭,早TM电话线传送到你边上糊你一熊脸了。。。)”
--------------------编程问答-------------------- 1.守护进程(这个比较容易,并且可以容易实现弹出输入密码框)

2.Hook,钩子, Hook OperProcess来实现进程的保护. 参考这里 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
这个方法要求技术深度高,并且,个人认知中,如果同时还需要弹出密码框来验证密码,很不容易.

自己决定. --------------------编程问答--------------------
引用 5 楼 silwol 的回复:
看看这个
http://social.msdn.microsoft.com/Forums/en-US/6ab0ffce-45ce-444a-ae0a-933c9b6985d6/hide-from-task-managers-processes-tab

或者其实你可以考虑加个守护进程,名字就叫svchost.exe,反正任务管理器里面这东西多的要死,他敢杀就让他杀好了。

其实这东西你就让客户自己想办法解决就对了,指定规章制度或者网管把他们的admin权限收回还是别的什么,反正这是他们的问题。
你可以想象一下下面这个场景:
当你的客户怒气冲冲的打电话质问你们的支持人员
“你们交给我的是什么TM垃圾程序!!!为什么我从后台把它杀死了,它就不工作了???!!!垃圾!!!”
客服:“-_-#(要不是老子还要靠这个吃饭,早TM电话线传送到你边上糊你一熊脸了。。。)”


确实大家都建议使用守护进程的方式!我其实觉得这也是常规的解决方案!何必搞得跟杀软似得。 --------------------编程问答--------------------
引用 6 楼 Lost_Painting 的回复:
1.守护进程(这个比较容易,并且可以容易实现弹出输入密码框)

2.Hook,钩子, Hook OperProcess来实现进程的保护. 参考这里 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
这个方法要求技术深度高,并且,个人认知中,如果同时还需要弹出密码框来验证密码,很不容易.

自己决定.


在看雪里摸索了半天,对于我这种停留在百度和.与alt /来完成工作的人来说实在是难了些!其实我心里一直再呼喊@有TM实例就好了@ --------------------编程问答--------------------
引用 5 楼 silwol 的回复:
看看这个
http://social.msdn.microsoft.com/Forums/en-US/6ab0ffce-45ce-444a-ae0a-933c9b6985d6/hide-from-task-managers-processes-tab

或者其实你可以考虑加个守护进程,名字就叫svchost.exe,反正任务管理器里面这东西多的要死,他敢杀就让他杀好了。

其实这东西你就让客户自己想办法解决就对了,指定规章制度或者网管把他们的admin权限收回还是别的什么,反正这是他们的问题。
你可以想象一下下面这个场景:
当你的客户怒气冲冲的打电话质问你们的支持人员
“你们交给我的是什么TM垃圾程序!!!为什么我从后台把它杀死了,它就不工作了???!!!垃圾!!!”
客服:“-_-#(要不是老子还要靠这个吃饭,早TM电话线传送到你边上糊你一熊脸了。。。)”


Plz help me out --------------------编程问答-------------------- 是啊 你的项目名称就叫svchost运行起来就是svchost.exe啊 
他绝对不敢结束系统的svchost.exe哈哈
另外你可以考虑使用windows服务 --------------------编程问答--------------------
引用 10 楼 jiaoshiyao 的回复:
是啊 你的项目名称就叫svchost运行起来就是svchost.exe啊 
他绝对不敢结束系统的svchost.exe哈哈
另外你可以考虑使用windows服务

但是他知道这个不是系统进程啊,就是因为他区分的出来是不是系统进程,所以改名的方式只能罢了。我试过改名字为service.exe,在xp里边确实不可被结束,因为被认为是系统进程,但是!又tm但是,win7里边自定义的service.exe可以被干掉。其实你说的服务,服务我认为就是为了开机启动而用的,最终还是去调用exe啊,还是可以被结束的啊。难道我对windows服务理解错误? --------------------编程问答-------------------- 大家不要只是打打酱油啊,有没有人研究过关闭进程时需要密码?麻烦给个思路或者资料呗???满天神佛,过路大仙,再求一次! --------------------编程问答--------------------
引用 12 楼 captainyanyan 的回复:
大家不要只是打打酱油啊,有没有人研究过关闭进程时需要密码?麻烦给个思路或者资料呗???满天神佛,过路大仙,再求一次!
这个 我只知道杀毒软件有这个功能 貌似需要修改系统底层 然后和杀毒软件抢夺 windows权限 --------------------编程问答-------------------- 例如监控软件 全屏之后 禁用所有的键盘按钮  --------------------编程问答--------------------
引用 13 楼 jiaoshiyao 的回复:
Quote: 引用 12 楼 captainyanyan 的回复:

大家不要只是打打酱油啊,有没有人研究过关闭进程时需要密码?麻烦给个思路或者资料呗???满天神佛,过路大仙,再求一次!
这个 我只知道杀毒软件有这个功能 貌似需要修改系统底层 然后和杀毒软件抢夺 windows权限


很困难的样子,谢谢你的支持。同事建议,如果能捕获到去关闭该进程时要操作的按钮或者键盘上的delete,或者在该进程上有右键动作这三个事件的话,弄个提示框出来阻塞掉系统的对话框。有木有可能呢? --------------------编程问答-------------------- 内个也需要修改系统底层吧 C#不适合做和系统相关的东西 另外C#程序运行在.NetFramework这使得他更脆 
个人感觉你应该 把你的软件修改成全屏 禁用Windows啊 或者delete这些快捷键 然后有一个自动进入工作的配置(例如打开软件需要点几下才能工作 )你可以在工作的时候向本地文件写入一个状态 在正常关闭程序的时候取消这个状态 (意思就是 如果上次未正常关闭 则继续上次工作) 最后加一个守护进程 如果他关闭了 则自动重启这个程序 在自动重启的时候 弄个报警声音什么的 让他们装个大喇叭 好抓贼 
最后说这事C#做真的很难 做系统相关他不行 另外谁对系统底层这么了解啊 最好的就是帮助他们 把贼抓出来 --------------------编程问答-------------------- 如果是Winform程序 窗体有个3d的属性 会全屏 --------------------编程问答-------------------- 对 守护进程检测到 程序非正常关闭的时候报警 让他们买个大音响!!! --------------------编程问答--------------------
引用 16 楼 jiaoshiyao 的回复:
内个也需要修改系统底层吧 C#不适合做和系统相关的东西 另外C#程序运行在.NetFramework这使得他更脆 
个人感觉你应该 把你的软件修改成全屏 禁用Windows啊 或者delete这些快捷键 然后有一个自动进入工作的配置(例如打开软件需要点几下才能工作 )你可以在工作的时候向本地文件写入一个状态 在正常关闭程序的时候取消这个状态 (意思就是 如果上次未正常关闭 则继续上次工作) 最后加一个守护进程 如果他关闭了 则自动重启这个程序 在自动重启的时候 弄个报警声音什么的 让他们装个大喇叭 好抓贼 
最后说这事C#做真的很难 做系统相关他不行 另外谁对系统底层这么了解啊 最好的就是帮助他们 把贼抓出来

在自动重启的时候 弄个报警声音什么的 让他们装个大喇叭 好抓贼。这思路刚刚的!! --------------------编程问答--------------------
引用 18 楼 jiaoshiyao 的回复:
对 守护进程检测到 程序非正常关闭的时候报警 让他们买个大音响!!!

忘了说了哎,我这没有form界面,单纯的一个进程。 --------------------编程问答--------------------
引用 17 楼 jiaoshiyao 的回复:
如果是Winform程序 窗体有个3d的属性 会全屏

忘了说了哎,我这没有form界面,单纯的一个进程。 --------------------编程问答-------------------- 那就直接加一个守护进程帮他们抓贼抓到了贼谁都没问题了! --------------------编程问答--------------------
引用 22 楼 jiaoshiyao 的回复:
那就直接加一个守护进程帮他们抓贼抓到了贼谁都没问题了!

哎,我前边说最好是结束进程需要密码,为啥呢?因为我们这个进程是允许特定人员进行结束的。再说也不是贼,客户机器配置低,当他们主要业务卡的时候,就会把非系统的进程杀掉。 --------------------编程问答-------------------- 。。。。。。。。问题是你的问题太难了。。 --------------------编程问答--------------------
引用 24 楼 jiaoshiyao 的回复:
。。。。。。。。问题是你的问题太难了。。


纠结了三天了………… 不过我觉得这个问题具有典型性。肯定还有不少有同需求的,还是想研究下进程关闭提示密码的方式,即使这个项目用不上。 --------------------编程问答-------------------- 再没人来光顾光顾了?还是难道都怕掉坑里? --------------------编程问答-------------------- 我靠,这需求太奇葩了,自己把进程关了还嫌进程没密码。。。hook这方式也不好,涉及到底层,杀软必拦,什么隐藏进程的,虽然可以实现,但是麻烦加上杀软的原因。要不弄个壳子吧,把自己的进程取个svchost.exe之类的,然后弄另外一个进程启动这个进程,启动后关闭壳子,这样用户就只能看到svchost.exe了,这样他就不敢随便关了。
什么样的破需求对应什么样的方法。。 --------------------编程问答-------------------- 挂个消息钩子。然后钩子dll和net程序通信。如果是关闭自己。从C#谈对话框。
或者把net注入到winlogon进程。
不过杀软都要报的。
驱动的就别弄了。
技术不行。很危险。 --------------------编程问答--------------------
引用 18 楼 jiaoshiyao 的回复:
对 守护进程检测到 程序非正常关闭的时候报警 让他们买个大音响!!!

看到这个回复,在办公室差点笑出声来。。。回到正题,如下方法不知道行不行,楼主自己测试:

         this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.TaskManagerClosing)
            {
                f2.ShowDialog();
                if (f2.textBox1.Text != "12345")
                {
                    e.Cancel = true;
                }
            }
        }
--------------------编程问答-------------------- 还有一个办法是进程注入,用API在系统进程“explorer.exe”中开辟空间,网上有详细的步骤 --------------------编程问答--------------------
引用 29 楼 weizhuangwen 的回复:
Quote: 引用 18 楼 jiaoshiyao 的回复:

对 守护进程检测到 程序非正常关闭的时候报警 让他们买个大音响!!!

看到这个回复,在办公室差点笑出声来。。。回到正题,如下方法不知道行不行,楼主自己测试:

         this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.TaskManagerClosing)
            {
                f2.ShowDialog();
                if (f2.textBox1.Text != "12345")
                {
                    e.Cancel = true;
                }
            }
        }

你的貌似捕捉不到 --------------------编程问答--------------------
引用 27 楼 sjjwind 的回复:
我靠,这需求太奇葩了,自己把进程关了还嫌进程没密码。。。hook这方式也不好,涉及到底层,杀软必拦,什么隐藏进程的,虽然可以实现,但是麻烦加上杀软的原因。要不弄个壳子吧,把自己的进程取个svchost.exe之类的,然后弄另外一个进程启动这个进程,启动后关闭壳子,这样用户就只能看到svchost.exe了,这样他就不敢随便关了。
什么样的破需求对应什么样的方法。。


亲 是特定的人!比如我们公司用的ESET杀毒软件,结束进程的时候需要密码,而这个密码我不知道,网管知道的。这个需求合理吧?只有知道密码的人或者持有我给他的结束用命令或软件的人才可以结束,有点绕
! --------------------编程问答-------------------- http://www.cnblogs.com/zhangdongsheng/archive/2012/10/26/2741693.html --------------------编程问答--------------------
引用 29 楼 weizhuangwen 的回复:
Quote: 引用 18 楼 jiaoshiyao 的回复:

对 守护进程检测到 程序非正常关闭的时候报警 让他们买个大音响!!!

看到这个回复,在办公室差点笑出声来。。。回到正题,如下方法不知道行不行,楼主自己测试:

         this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.TaskManagerClosing)
            {
                f2.ShowDialog();
                if (f2.textBox1.Text != "12345")
                {
                    e.Cancel = true;
                }
            }
        }


测试了不好用的!既然任务管理器关闭进程无法触发这个close事件,为毛有个TaskManagerClosing的方法,让我满怀希望,搞不懂这个TaskManagerClosing()方法到底有什么用。--难道是监视另一个程序的进程关闭事件??? --------------------编程问答--------------------
引用 34 楼 captainyanyan 的回复:
Quote: 引用 29 楼 weizhuangwen 的回复:

Quote: 引用 18 楼 jiaoshiyao 的回复:

对 守护进程检测到 程序非正常关闭的时候报警 让他们买个大音响!!!

看到这个回复,在办公室差点笑出声来。。。回到正题,如下方法不知道行不行,楼主自己测试:

         this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.TaskManagerClosing)
            {
                f2.ShowDialog();
                if (f2.textBox1.Text != "12345")
                {
                    e.Cancel = true;
                }
            }
        }


测试了不好用的!既然任务管理器关闭进程无法触发这个close事件,为毛有个TaskManagerClosing的方法,让我满怀希望,搞不懂这个TaskManagerClosing()方法到底有什么用。--难道是监视另一个程序的进程关闭事件???

一开始我也有和你一样的疑问!!!!!!!!!但仔细研究后,发现.....进程结束有两种:一种是任务管理器的“结束任务”。另外一种是“结束进程”,可能我上面的代码只对前者有用(没测试过)。而后者我刚试验了也无效。 --------------------编程问答-------------------- 嗯,又试验了一下,前者是有效的,但后者无效。PS:而且前者在2秒后没还无法“结束任务”,那么2秒后将会调用“结束进程”,所以那个密码框只停留了两秒.... --------------------编程问答--------------------
引用 36 楼 weizhuangwen 的回复:
嗯,又试验了一下,前者是有效的,但后者无效。PS:而且前者在2秒后没还无法“结束任务”,那么2秒后将会调用“结束进程”,所以那个密码框只停留了两秒....

你这样还是实现不了啊  我还是捕捉不到这个事件啊 --------------------编程问答--------------------
引用 37 楼 jiaoshiyao 的回复:
Quote: 引用 36 楼 weizhuangwen 的回复:

嗯,又试验了一下,前者是有效的,但后者无效。PS:而且前者在2秒后没还无法“结束任务”,那么2秒后将会调用“结束进程”,所以那个密码框只停留了两秒....

你这样还是实现不了啊  我还是捕捉不到这个事件啊


顶! --------------------编程问答-------------------- 还是听我的!守护进程抓贼!! --------------------编程问答--------------------
引用 39 楼 jiaoshiyao 的回复:
还是听我的!守护进程抓贼!!

想到一种方法,但是太麻烦,不想弄。就是:在回调函数中,忽略所有windows消息。然后再尝试结束进程。假设程序会被关闭,那么得出结论:结束进程并不与窗体有互动关系,无法捕获消息。反之:结束进程会有消息通知窗体。那么就可以利用这个接收到的消息来做判断,是否用户结束进程。
那么再假设:结束进程后窗体,窗体被关闭,回调函数无任何消息进入。那么必然是程序被强制结束,内存被瞬间整块释放。那么这种情况,我目前还木有办法....待会再帮你想想。。 --------------------编程问答--------------------
引用 39 楼 jiaoshiyao 的回复:
还是听我的!守护进程抓贼!!


技术解决最好了,我们是要解决矛盾,不是激化矛盾。结束进程的人并没有恶意,他们觉得电脑卡,内存占用高,为了工作才结束的这些非系统进程。 --------------------编程问答--------------------
引用 33 楼 whowhen21 的回复:
http://www.cnblogs.com/zhangdongsheng/archive/2012/10/26/2741693.html


没有发现着手点,sorry。 --------------------编程问答-------------------- 哦 那我的行不通了。。。。哈哈 我现在知道为什么现在做项目都用b/s做不用c/s做了。。。。。 --------------------编程问答-------------------- 还是挂钩子呗,开个线程侦测WM_DESTORY,监测到了就给他messagebox --------------------编程问答-------------------- 给客户说,在发现上班时间谁的电脑没运行那个客户端程序,立马扣月底奖金。
我觉得他们就不会再那么做了。 --------------------编程问答--------------------
引用 45 楼 5653325 的回复:
给客户说,在发现上班时间谁的电脑没运行那个客户端程序,立马扣月底奖金。
我觉得他们就不会再那么做了。
不错 是个好方法 --------------------编程问答-------------------- 就告诉用户,那个程序会自动报告什么时候被关掉了,如果上班时间没开,就算旷工。 --------------------编程问答-------------------- 百度资料很多,可以查查看 --------------------编程问答-------------------- 最好把你的程序注册成系统服务,这样用户就无法关闭进程, --------------------编程问答--------------------
引用 49 楼 wind_cloud2011 的回复:
最好把你的程序注册成系统服务,这样用户就无法关闭进程,

咋我就一直没有想到呢!!好办法!顶! --------------------编程问答-------------------- [

引用 48 楼 a205209 的回复:
百度资料很多,可以查查看

帖子内容里写了我想要的资料,比如能够在结束进程的时候弹出密码框的方案资料,能够将系统任务管理器关闭时弹出的消息框替换为自定义的密码框。这些资料我没有在网上找到,你说的@百度资料很多@,指的是上述方面嘛?如果有的话,麻烦给个链接好么? --------------------编程问答--------------------
引用 50 楼 weizhuangwen 的回复:
Quote: 引用 49 楼 wind_cloud2011 的回复:

最好把你的程序注册成系统服务,这样用户就无法关闭进程,

咋我就一直没有想到呢!!好办法!顶!

请教一下,我认为系统服务就是注册为服务后去执行的exe,任务管理器里还是有进程的,实践后发现还是可以子啊任务管理中结束的?是我理解的错误,还是做得错误,能给指正下么?不胜感激! --------------------编程问答-------------------- 帖子好火。。。表示这种东西谁都敢兴趣。。 --------------------编程问答-------------------- 劳烦大家能在技术的角度考虑下,需求上就是我帖子中所述,至于去抓关掉的人之类的只是大神们说笑而已。需求重申下,就是程序可以在进程管理中结束,但是需要特定的人去结束(比如,有密码框的话,知道密码的人才能结束。比如进程在任务管理中无法直接关闭,但是知道使用命令或者持有我给bat文件的人可以关闭)、这是技术点。 --------------------编程问答--------------------
引用 53 楼 jiaoshiyao 的回复:
帖子好火。。。表示这种东西谁都敢兴趣。。

谢谢帮顶!请问系统服务这块你懂么?49楼说“最好把你的程序注册成系统服务,这样用户就无法关闭进程,”
我怎么没有实现呢? --------------------编程问答-------------------- 表示对这块不懂。。。本身C#的东西还不太会呢 现在不敢研究安全方面  --------------------编程问答--------------------
引用 6 楼 Lost_Painting 的回复:
1.守护进程(这个比较容易,并且可以容易实现弹出输入密码框)

2.Hook,钩子, Hook OperProcess来实现进程的保护. 参考这里 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
这个方法要求技术深度高,并且,个人认知中,如果同时还需要弹出密码框来验证密码,很不容易.

自己决定.


你说指的守护进程是指双进程互相守护? --------------------编程问答-------------------- 看上去还不简单呐 --------------------编程问答--------------------
引用 52 楼 captainyanyan 的回复:
Quote: 引用 50 楼 weizhuangwen 的回复:

Quote: 引用 49 楼 wind_cloud2011 的回复:

最好把你的程序注册成系统服务,这样用户就无法关闭进程,

咋我就一直没有想到呢!!好办法!顶!

请教一下,我认为系统服务就是注册为服务后去执行的exe,任务管理器里还是有进程的,实践后发现还是可以子啊任务管理中结束的?是我理解的错误,还是做得错误,能给指正下么?不胜感激!

注册成系统服务,任务管理器里还是有进程的,但用户是无法关闭进程,会提示“拒绝访问”,要关闭,只能到服务里结束它 --------------------编程问答--------------------
引用 59 楼 wind_cloud2011 的回复:
Quote: 引用 52 楼 captainyanyan 的回复:

Quote: 引用 50 楼 weizhuangwen 的回复:

Quote: 引用 49 楼 wind_cloud2011 的回复:

最好把你的程序注册成系统服务,这样用户就无法关闭进程,

咋我就一直没有想到呢!!好办法!顶!

请教一下,我认为系统服务就是注册为服务后去执行的exe,任务管理器里还是有进程的,实践后发现还是可以子啊任务管理中结束的?是我理解的错误,还是做得错误,能给指正下么?不胜感激!

注册成系统服务,任务管理器里还是有进程的,但用户是无法关闭进程,会提示“拒绝访问”,要关闭,只能到服务里结束它

首先谢谢你的关注!
我实验后发现,虽然注册为系统服务后exe的权限成为SYSTEM,但是仍然可以通过任务管理器结束的。
--------------------编程问答--------------------
引用 60 楼 captainyanyan 的回复:
Quote: 引用 59 楼 wind_cloud2011 的回复:

Quote: 引用 52 楼 captainyanyan 的回复:

Quote: 引用 50 楼 weizhuangwen 的回复:

Quote: 引用 49 楼 wind_cloud2011 的回复:

最好把你的程序注册成系统服务,这样用户就无法关闭进程,

咋我就一直没有想到呢!!好办法!顶!

请教一下,我认为系统服务就是注册为服务后去执行的exe,任务管理器里还是有进程的,实践后发现还是可以子啊任务管理中结束的?是我理解的错误,还是做得错误,能给指正下么?不胜感激!

注册成系统服务,任务管理器里还是有进程的,但用户是无法关闭进程,会提示“拒绝访问”,要关闭,只能到服务里结束它

首先谢谢你的关注!
我实验后发现,虽然注册为系统服务后exe的权限成为SYSTEM,但是仍然可以通过任务管理器结束的。

注册服务使用的网上扒来的bat文件执行的:
代码如下
@echo off


set service_name=CyPLATETaskManager


set prog_path=D:\\Release\\CyPLATETaskManager.exe


set strt=auto

echo                     EasyService 
echo =========================================================== 
::pause
::======================111==========================
set s32=%windir%\system32
set reg_file=EasyService.reg

net stop %service_name% 2>nul
copy instsrv.exe %s32%
copy srvany.exe %s32%

%s32%\instsrv.exe %service_name% remove 2>nul
%s32%\instsrv.exe %service_name% %s32%\srvany.exe >nul


sc config %service_name% start= %strt%
sc description %service_name% "%service_description%"

echo 222
echo Windows Registry Editor Version 5.00 > %reg_file%
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%service_name%\Parameters] >> %reg_file%
echo "Application"="%prog_path%" >> %reg_file%

echo 333
%reg_file%

net start %service_name%
echo ===========================ヘ・ノ============================
pause --------------------编程问答-------------------- 过去也有个朋友问过相同问题,我告诉他服务停止前执行重启操作,到现在还相安无事。

话说,不是做了什么惹人恨的事情吧?专门去停掉。 --------------------编程问答-------------------- 帮顶!帮抓贼! --------------------编程问答--------------------
引用 63 楼 jiaoshiyao 的回复:
帮顶!帮抓贼!


引用 62 楼 icdbow 的回复:
过去也有个朋友问过相同问题,我告诉他服务停止前执行重启操作,到现在还相安无事。

话说,不是做了什么惹人恨的事情吧?专门去停掉。

谢谢你们顶贴,前边解释过,客户方的电脑配置低,我们这个程序有点吃内存,电脑如果真的很卡了,万不得已还是可以关闭的,只要关闭的时候由指定的人关闭就好,所以程序要有密码关闭,或者只能通过命令,第三方程序结束! 希望朋友们考虑下技术点。如果需求可以改,我何必来论坛求助,求助是因为技术点的迷惑。希望我解释明白了 谢谢两位。 --------------------编程问答--------------------
引用 64 楼 captainyanyan 的回复:
谢谢你们顶贴,前边解释过,客户方的电脑配置低,我们这个程序有点吃内存,电脑如果真的很卡了,万不得已还是可以关闭的,只要关闭的时候由指定的人关闭就好,所以程序要有密码关闭,或者只能通过命令,第三方程序结束! 希望朋友们考虑下技术点。如果需求可以改,我何必来论坛求助,求助是因为技术点的迷惑。希望我解释明白了 谢谢两位。


LZ可能入行不久,对需求判断有误。像这类需求真真切切的是无理需求,这和“给你一辆单车,请在20分钟内托运80吨水泥”一样。
LZ的心态我也有过,这些需求乍一看努力一下就可以搞定,这样又能多学到一些知识。如果是纯技术探讨,这没什么问题。

可是,你提到“客户”两个字,这就有大问题了。
1、客户并不知道系统结构,本来就已经很破的机器,不能保证你加了个实时监控不会更卡,实在太卡,客户会直接放弃使用,你这样做简直在拆自己的台;
2、如果项目还没有完成,会直接影响项目进度,项目延期,公司会直接损失、客户也会不满,而你有可能被痛骂,项目是"共赢"工程,当然也可能“共输”;
3、说服客户换电脑,说不定自己还能拿“外快”,有时一句话能代替千行代码。 --------------------编程问答-------------------- 如果你怕定撞客户,你直接和你领导(或老板)反映,说他们的机器破的不能再破,严重影响上线,同时建议老板将他们的计算机换代的事情也包下来,这样又能捞一把。领导一定长笑飞奔而去,事情解决了。 --------------------编程问答-------------------- 写一个后台服务,实时判断进程是否正常运行,如果进程被关闭,就立即启动程序 。

--------------------编程问答-------------------- http://www.cnblogs.com/sorex/archive/2012/05/16/2502001.html
C#创建Windows Service(Windows 服务) --------------------编程问答-------------------- 一个DEMO:https://github.com/sorex/WindowsServiceTest/archive/master.zip --------------------编程问答-------------------- 用easyhook看看,搞成了别忘了共享呀

1.任务管理器的“结束任务”实际上就是强制终止进程,它所使用的是一个叫做TerminateProcess()的Win32 API函数以下是此函数的定义:

BOOL TerminateProcess(
HANDLE hProcess; // 将被结束进程的句柄
UINT uExitCode; // 指定进程的退出码
);

2.为了得到要杀掉的进程的句柄,首先要取得该进程的句柄,即采用以下函数获取进程的句柄:
HANDLE OpenProcess(
DWORD dwDesiredAccess, // 希望获得的访问权限
BOOL bInheritHandle, // 指明是否希望所获得的句柄可以继承
DWORD dwProcessId // 要访问的进程ID
);
在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的 dwProcessId是在系统范围内唯一确定的。
3.在每次调用OpenProcess()的时候,先检查dwProcessId是否为要防被关闭的进程的ID(利用进程间通讯机制),如果是的话就简单地 返回一个错误码就可以了,任务管理器拿进程的句柄,自然无法关闭该进程了。
4.至于实现就采用全局HOOK的办法,《windows核心编程》对此讲述了好几种方法,有兴趣的可以参照。

在C#中hook api可以使用easyhook这个类库 --------------------编程问答--------------------
引用 67 楼 wind_cloud2011 的回复:
写一个后台服务,实时判断进程是否正常运行,如果进程被关闭,就立即启动程序 。

请问这个后台服务难道不存在进程么?如果存在进程这个进程被杀掉了怎么办?之前我试验了注册为系统服务,但是进程一样可以被杀掉的。谢谢! --------------------编程问答-------------------- 我只能说,我现在用的软件是可以实现的,但是我不懂实现过程。。。。。抱歉 --------------------编程问答-------------------- 帮顶,希望LZ成功后分享。
虽然我是做Web的,但对于WinFrom的兴趣一直没有退过。

持续关注。 --------------------编程问答-------------------- 先做个小结:目前实现的方案是保持进程在任务管理器中不可被关闭,然后我整个bat命令文件给客户的领导,需要关闭时拿着u盘点击执行下就taskkill掉了,进程不可被关闭采用的网上通用的方法。不过我还是会研究如何实现@关闭进程时需要密码@这个功能。需求之类的大家不用考虑了,大家有没有想法实现下@关闭进程时需要密码@这个问题,有木有思路??? --------------------编程问答-------------------- 楼主,没有结果了吗? --------------------编程问答-------------------- 呵呵 自个顶一个。
搞了一天,已经实现该功能,主要方法如下:
说明:我是通过钩子拦截结束进程API来实现该功能的。
1、由于是全局钩子,钩子程序部分封装在dll中,故dll获取主进程ID时,通过“内存映射”实现。(无法通过参数的形式将主进程ID传给dll)
2、打开任务管理器时,系统会调用OpenProcess(Win32API)以获取各个进程的句柄。先Hook OpenProcess,然后在OpenProcess的替换函数中添加如下代码记录下本进程的句柄:
if (dwDesiredAccess == PROCESS_TERMINATE && dwProcessId == *pProcID)
{myHandle = OpenProcess( dwDesiredAccess, bInheritHandle, dwProcessId );        
return myHandle;}        
myHandle就是记录下来的本进程在任务管理器中的句柄。注意:句柄是进程相关的值,不同的进程间句柄的比较没有意义。
3、hook TerminateProcess(HANDLE hProcess, UINT uExitCode),将hProcess与先前记录的本进程句柄myHandle进行匹配,如果相等则断定任务管理器正在结束本进程,接着即可添加自己的处理了。 --------------------编程问答--------------------
引用 76 楼 weizhuangwen 的回复:
呵呵 自个顶一个。
搞了一天,已经实现该功能,主要方法如下:
说明:我是通过钩子拦截结束进程API来实现该功能的。
1、由于是全局钩子,钩子程序部分封装在dll中,故dll获取主进程ID时,通过“内存映射”实现。(无法通过参数的形式将主进程ID传给dll)
2、打开任务管理器时,系统会调用OpenProcess(Win32API)以获取各个进程的句柄。先Hook OpenProcess,然后在OpenProcess的替换函数中添加如下代码记录下本进程的句柄:
if (dwDesiredAccess == PROCESS_TERMINATE && dwProcessId == *pProcID)
{myHandle = OpenProcess( dwDesiredAccess, bInheritHandle, dwProcessId );        
return myHandle;}        
myHandle就是记录下来的本进程在任务管理器中的句柄。注意:句柄是进程相关的值,不同的进程间句柄的比较没有意义。
3、hook TerminateProcess(HANDLE hProcess, UINT uExitCode),将hProcess与先前记录的本进程句柄myHandle进行匹配,如果相等则断定任务管理器正在结束本进程,接着即可添加自己的处理了。



有没有C#代码共享呀

--------------------编程问答-------------------- 前段时间 在厂家那里有个pdm系统集成的时候他们用 delphi 写了个,实现了杀进程在弹出框要输入密码.
不过原理我就不知道了。
单单注册系统服务 肯定也不行阿。
像金山毒霸 那个 进程 就无法终止。 不知道是这么做的。
如果是用hook的话 为撒360没有报警呢? 进程注入一般都会报警的~

--------------------编程问答-------------------- 还不如帮他们抓贼呢 --------------------编程问答-------------------- 最近一忙忘了回复了,正如我的帖子最开始说的,虽然实现了进程不可通过任务管理器关闭,但是64位下仍然会被关闭,在大牛帮助下64位也可以实现不可结束了,方法采用的easyhook。至于关闭需要密码正在研究! --------------------编程问答--------------------
引用 77 楼 liucqa 的回复:
Quote: 引用 76 楼 weizhuangwen 的回复:

呵呵 自个顶一个。
搞了一天,已经实现该功能,主要方法如下:
说明:我是通过钩子拦截结束进程API来实现该功能的。
1、由于是全局钩子,钩子程序部分封装在dll中,故dll获取主进程ID时,通过“内存映射”实现。(无法通过参数的形式将主进程ID传给dll)
2、打开任务管理器时,系统会调用OpenProcess(Win32API)以获取各个进程的句柄。先Hook OpenProcess,然后在OpenProcess的替换函数中添加如下代码记录下本进程的句柄:
if (dwDesiredAccess == PROCESS_TERMINATE && dwProcessId == *pProcID)
{myHandle = OpenProcess( dwDesiredAccess, bInheritHandle, dwProcessId );        
return myHandle;}        
myHandle就是记录下来的本进程在任务管理器中的句柄。注意:句柄是进程相关的值,不同的进程间句柄的比较没有意义。
3、hook TerminateProcess(HANDLE hProcess, UINT uExitCode),将hProcess与先前记录的本进程句柄myHandle进行匹配,如果相等则断定任务管理器正在结束本进程,接着即可添加自己的处理了。



有没有C#代码共享呀

easyhook确实可以!最棒的是64位也提供了解决方案。 --------------------编程问答--------------------
引用 80 楼 captainyanyan 的回复:
最近一忙忘了回复了,正如我的帖子最开始说的,虽然实现了进程不可通过任务管理器关闭,但是64位下仍然会被关闭,在大牛帮助下64位也可以实现不可结束了,方法采用的easyhook。至于关闭需要密码正在研究!


杀毒软件对easyhook的进行报警吗 --------------------编程问答--------------------
引用 82 楼 yumineer 的回复:
Quote: 引用 80 楼 captainyanyan 的回复:

最近一忙忘了回复了,正如我的帖子最开始说的,虽然实现了进程不可通过任务管理器关闭,但是64位下仍然会被关闭,在大牛帮助下64位也可以实现不可结束了,方法采用的easyhook。至于关闭需要密码正在研究!


杀毒软件对easyhook的进行报警吗
报警! --------------------编程问答--------------------
引用 83 楼 captainyanyan 的回复:
Quote: 引用 82 楼 yumineer 的回复:

Quote: 引用 80 楼 captainyanyan 的回复:

最近一忙忘了回复了,正如我的帖子最开始说的,虽然实现了进程不可通过任务管理器关闭,但是64位下仍然会被关闭,在大牛帮助下64位也可以实现不可结束了,方法采用的easyhook。至于关闭需要密码正在研究!


杀毒软件对easyhook的进行报警吗
报警!
 eset倒是不报警,360提示黄色警告,还有杀毒软件直接不让运行! --------------------编程问答--------------------
引用 70 楼 liucqa 的回复:
用easyhook看看,搞成了别忘了共享呀

1.任务管理器的“结束任务”实际上就是强制终止进程,它所使用的是一个叫做TerminateProcess()的Win32 API函数以下是此函数的定义:

BOOL TerminateProcess(
HANDLE hProcess; // 将被结束进程的句柄
UINT uExitCode; // 指定进程的退出码
);

2.为了得到要杀掉的进程的句柄,首先要取得该进程的句柄,即采用以下函数获取进程的句柄:
HANDLE OpenProcess(
DWORD dwDesiredAccess, // 希望获得的访问权限
BOOL bInheritHandle, // 指明是否希望所获得的句柄可以继承
DWORD dwProcessId // 要访问的进程ID
);
在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的 dwProcessId是在系统范围内唯一确定的。
3.在每次调用OpenProcess()的时候,先检查dwProcessId是否为要防被关闭的进程的ID(利用进程间通讯机制),如果是的话就简单地 返回一个错误码就可以了,任务管理器拿进程的句柄,自然无法关闭该进程了。
4.至于实现就采用全局HOOK的办法,《windows核心编程》对此讲述了好几种方法,有兴趣的可以参照。

在C#中hook api可以使用easyhook这个类库


用easyhook确实可以,不过杀软都会报警的! --------------------编程问答-------------------- 好奇。。。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,