如果我在会话中运行以下命令...
(Get-Process -Id $pid).CloseMainWindow()
我能够正常关闭进程(不会出现模态窗口或其他弹出窗口)。
但是,如果pid在同一台计算机上的另一个用户会话中(正在运行RDS),则该进程不会关闭,并且CloseMainWindow()返回FALSE(如果在我自己的会话中运行,则返回TRUE)。如果我从其他用户的会话中运行Powershell,它也将起作用。
我特别需要一种正常关闭程序的方法,因为该程序有一些重要的清除操作,这些操作可以使数据库保持秩序。因此stop-process或process.kill()将不起作用。
答案 0 :(得分:0)
经过长时间的研究,似乎不可能做到这一点。但是,有一种解决方案至少满足了我的一些需求。
您可以创建Windows计划任务,该任务在会话 disconnect 上触发。这使您可以以用户身份而不是管理员身份运行清理作业 ,从而允许程序正常退出。
它有两个主要缺点。...
即使用户只是轻微的网络中断,它也会被调用(因此,您必须在脚本中构建一个wait()函数以使其休眠一会儿,然后检查它是否仍然断开连接-并非干净解决方案。
在注销事件期间不会调用它。为此,您需要使用由GPO触发的注销脚本。
希望这对以后的人有帮助。