我们有一台运行终端服务的
Windows Server 2008计算机.用户登录时,会启动自定义程序并驻留在系统托盘中,为我们公司提供一些自定义热键.
当我们需要更新该程序时,我们必须在新版本实际生效之前关闭所有会话的所有程序副本(more info here).我可以使用Taskkill
轻松结束所有会话的过程,但我想知道是否有一种简单的方法可以在之后的所有会话中重新启动该过程.
不会.Windows不提供您在此处询问的用户模拟功能.在Windows中没有sudo等价物,甚至是近似值.
我目前无法找到该文档或文章,但在Windows内部不允许sudo风格的用户模拟功能是一种刻意的设计决策方式,因此,我们非常感谢坚持下去. (甚至没有任何聪明的变通方法或黑客可以像通常那样规避它 – 这个根本就是根深蒂固,无法绕过它.)
在Windows世界中,为了[实际]执行用户的任何操作(无论是运行程序,还是对AD或其他任何内容进行身份验证),您需要一个access token,用于识别和验证用户的访问权限.仅当提供用户的帐户名和密码时(登录时,RunAs等),才会创建此访问令牌.
可能重要的警告(为了您的目的)是现有的access token can be duplicated到an impersonation token,可以传递到ImpersonateLoggedOnUser function,可以用于impersonate the security context of a logged-on user.
看看你是如何成为那些可能知道如何使用.NET的神秘魔术师的开发人员/程序员之一,这对于你编写一个小应用程序来实现你想要做的事情可能是有用的.
但是,要准确地说,没有命令可以运行或处理以模仿Windows用户,而不是编写一个(或找到其他编码的人),即便如此,它仅限于访问权限的用户可用(登录用户).