我无法将其作为Windows服务实现,因为我的进程必须与桌面交互,并且在Windows 7中禁止它。
实现这一目标的最简单方法是什么?从另一个(特权)用户开始?怎么做?
我的用户不是黑客,只是操作员,所以一些“愚蠢”的方法,比如隐藏在任务管理器中也会有所帮助。
编辑:根据提供的答案进行一些澄清
我的进程没有任何GUI,所以我试图避免从任务管理器中删除进程
我的流程是监控系统的客户端,必须监控用户的桌面,因此必须与桌面进行交互
编辑2:
我可以使用Windows服务在系统帐户下的用户会话中启动单独的进程(因为我的服务在系统帐户下运行)?用户可以杀死这个子进程吗?
答案 0 :(得分:2)
您可以disable the task manager使用组策略并隐藏应用程序窗口中的关闭按钮以及[Alt + F4]上的反应。
答案 1 :(得分:2)
正常工作,您无法从Process Explorer中终止该进程。管理员仍然可以杀死它,因为有足够的权限。这正是我所需要的
答案 2 :(得分:1)
关闭(根)窗口并不意味着停止进程 - 当消息泵循环存在时,您可以使用新窗口重新启动它(显然,如果您使用的是框架,那么可能有一个包装器)
但是如果用户拥有一个windows对象(如进程),他们总是可以删除(终止)它。但作为一个不同的用户运行,用户的凭据将需要以当前用户运行的启动器可访问的方式存储。
为了更具体地帮助我认为我们需要了解原因:
因为我的流程必须与桌面交互
是一项要求。
答案 3 :(得分:1)
从此MSDN blog:
您就是这样做的:
通过调用
获取用户令牌WTSQueryUserToken (WTSGetActiveConsoleSessionId (), &hToken) ;
在CreateProcessAsUser中使用此标记。
您只需要从服务中调用WTSQueryUserToken
,然后启动该过程 - 它也适用于Windows 7!