gpt4 book ai didi

PowerShell 进程在使用 dwCreationFlags=0 for CreateProcessAsUser() 的 exe 启动时失败

转载 作者:行者123 更新时间:2023-12-01 06:29:46 31 4
gpt4 key购买 nike

Issue :



(1) 在 windows server 2008 R2 x64 系统上

(2) a1.exe以u1用户身份运行,调用dwCreationFlags=0的CreateProcess() API来启动a2.​​exe。

(3) a2.exe 调用 CreateProcessAsUser() API with dwCreationFlags=CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED 以用户 u2 启动 powershell.exe

(4) a1.exe调用a2.exe 5次

(5) powershell命令行为“powershell.exe -command echo Hi”

(6) 只有第一个 powershell 进程成功运行,并返回输出“Hi”到 a1.exe,退出代码为 0

(7) 每隔一个(2 到 5 个)powershell 进程失败,退出代码为 1

Fix :



(1) 修复a2.exe 调用CreateProcessAsUser() API 的问题,dwCreationFlags=CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED | CREATE_NO_WINDOW 启动 powershell 进程。

Things I know :



(1) powershell 是一个控制台应用程序进程,因此在失败的情况下会使用父进程 a2.exe 的控制台窗口。

(2) 在5次调用中,a1.exe进程、5个a2.exe进程和5个powershell.exe进程都会使用同一个控制台窗口,即a1.exe

(3) 在工作情况下,powershell 进程既不会使用父进程 a2.exe 的控制台窗口,也不会创建新的控制台窗口,即不会为 powershell 进程设置控制台句柄。

(4) 在 pre-vista 系统(xp、2003 等)中没有这样的问题——即,即使不使用 CREATE_NO_WINDOW 属性,powershell 进程在所有 5 次启动中都成功。

My suspicion :



看起来,在 post-vista 系统(2008、7、8)中,powershell 进程在被要求使用相同的控制台窗口时遇到了问题。 (在没有控制台窗口 (CREATE_NO_WINDOW) 或具有不同控制台窗口 (CREATE_NEW_CONSOLE) 或不使用父进程的控制台窗口 (DETACHED_PROCESS) 的情况下启动 powershell 进程时没有问题。

My question :



我上面的怀疑是否正确。请求帮助我了解 post-vista 系统的 powershell 限制,尤其是 w.r.t 控制台共享。

马杜基兰

最佳答案

powershell is a console application process



是和否。从根本上说,PowerShell 是一个不需要窗口或控制台的可托管自动化引擎。但是,PowerShell 引擎是基于 .NET 的,因此您需要将它托管在 C#(或 VB 或 C++/CLI)应用程序中。

您在启动 PowerShell.exe 时通常使用的是一个瘦的控制台应用程序包装器,它实际上是一个 native 应用程序,用于引导 CLR 和 PowerShell 引擎(在 System.Management.Automation 命名空间中)。

关于PowerShell 进程在使用 dwCreationFlags=0 for CreateProcessAsUser() 的 exe 启动时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691130/

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