gpt4 book ai didi

windows - 如何从交互式 session 启动非交互式进程

转载 作者:可可西里 更新时间:2023-11-01 10:33:13 34 4
gpt4 key购买 nike

目标是能够以尽可能少的仪式非交互地测试运行 PowerShell 脚本。它在 CI 服务器上的运行方式有意不同于我以交互方式运行它并且我想调试它时的运行方式。理想情况下,我无需设置计划任务即可对此进行测试。命令行实用程序会很棒。

CI 服务器(TFS 构建,非交互式)和我的机器(交互式运行)之间的不同之处在于 [Environment]::UserInteractive 的值.当我输入 powershell -c [Environment]::UserInteractive在命令行,我得到 True正如预期的那样。目标是能够键入 someutility powershell -c [Environment]::UserInteractive并让它打印 False ,就像它会在 TFS 构建下运行打印一样。

我愿意写someutility在 C++ 中,如果有人可以概述这是如何工作的。我正在研究,但一个小时没有产生任何结果。每个人都已经在运行非交互式或想要启动交互式,而我处于完全相反的情况。似乎应该有一种方法可以从非管理员命令行执行此操作,因为启动的进程应该具有相同的用户权限,但仅限于非交互式。

到目前为止,我可以得到这个想要的 [Environment]::UserInteractive = 使用计划任务并选择“无论用户是否登录都运行”的错误行为。但这很痛苦,我看不到非交互式标准输出,我知道这是可能的,因为 TFS build 显示它是实时的。此外,计划任务在非交互式运行时不会结束,因此很难判断它何时完成。

最佳答案

The reference code for UserInteractive can be found here.当且仅当进程的窗口站未设置 WSF_VISIBLE 标志时,它才将该属性设置为 false。因此,您的实用程序应该创建一个新的窗口站和桌面(请参阅 CreateWindowStationCreateDesktop)并在那里启动子进程。

(只有任何给定 session 的默认窗口站是交互式的,因此大概手动创建的窗口站将不会默认设置 WSF_VISIBLE。如果事实并非如此,您应该能够使用 SetUserObjectInformation 切换标志。)

要为子进程选择窗口站和桌面,请在调用 CreateProcessSTARTUPINFO 结构的 lpDesktop 成员中指定它.

关于windows - 如何从交互式 session 启动非交互式进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41966617/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com