【问题标题】:powershell process failing when launched by an exe with dwCreationFlags=0 for CreateProcessAsUser()Powershell 进程在由 dwCreationFlags=0 for CreateProcessAsUser() 的 exe 启动时失败
【发布时间】:2014-05-16 01:09:36
【问题描述】:

问题:

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

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

(3) a2.exe 使用 dwCreationFlags=CREATE_BREAKAWAY_FROM_JOB | 调用 CreateProcessAsUser() API 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

修复:

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

我知道的事情:

(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 次启动中都成功。

我的怀疑:

看起来,在后 vista 系统(2008、7、8)中,当要求 powershell 进程使用相同的控制台窗口时,它们会遇到问题。 (在没有控制台窗口 (CREATE_NO_WINDOW) 或使用不同的控制台窗口 (CREATE_NEW_CONSOLE) 或不使用父进程的控制台窗口 (DETACHED_PROCESS) 时启动 powershell 进程时没有问题。

我的问题:

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

马杜基兰

【问题讨论】:

  • 我怀疑您需要 1. 直接与 Microsoft 交谈; 2,将请求上报给 PSH 团队:您正在寻找不太可能成为任何产品文档的一部分的非常具体的技术信息。 TL;DR:让多个进程想要完全控制在同一个控制台窗口中同时运行的控制台似乎是一个奇怪的秘诀。
  • 我建议您研究从 c# 对 powershell 运行空间的编程调用 - 这比您解决这些问题要少得多。msdn.microsoft.com/en-us/library/…

标签: powershell


【解决方案1】:

powershell是一个控制台应用进程

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多