【问题标题】:Escalate program out of Session 0将程序升级出会话 0
【发布时间】:2013-07-25 21:58:05
【问题描述】:

我的程序使用 DXGI API 与 DXGI 输出和适配器进行交互。

我主要使用命令行工具来开发它,因为我还不需要任何 GUI。

我还通过 Bitvise SSH 服务器访问我的 PowerShell 实例 - 每当我通过这个 PowerShell 实例运行我编译的 program.exe 时,据我所知,这意味着我的程序正在会话 0 中运行,这意味着我只可以访问 DXGI 功能的子集(请参阅Use Direct3D in Session 0 Processes)。

有什么办法可以绕过这个要求吗?是否有一个标志我可以传递给 program.exe 以某种方式将其从会话 0 中弹出?

【问题讨论】:

  • Soo,您正在从在会话 0 中运行的服务器启动您的进程 (program.exe),并希望它开始在用户会话中运行?是的,这绝对是可能的,但据我所知,这并不简单。我认为您需要使用对 CreateProcess API 的巧妙调用才能做到这一点。
  • 完全正确 - 我的程序是无头的,我真的只想能够在不打开整个 GUI 的情况下检查它的标准输出。我也在尝试从 FreeBSD 开发盒开发 DXGI 应用程序,所以也许我正在向风车倾斜,但似乎我已经很接近了。

标签: c++ windows process terminal-services


【解决方案1】:

如果不是通过 WinAPI 并且您可以使用并启动其他 exe 来启动您的 program.exe,我认为您可以尝试使用 psexec 实用程序:http://technet.microsoft.com/en-us/sysinternals/bb897553

我猜周围也有类似的实用程序。

编辑: 您也可以使用 psexec 在本地机器上启动进程,请参阅“计算机”参数的参考:

计算机 指示 PsExec 在指定的计算机上运行应用程序。 如果您省略计算机名称,PsExec 将在本地系统上运行应用程序,如果您输入计算机名称“\*”,PsExec 将在当前域中的所有计算机上运行应用程序。

另一个编辑 我能够在我的会话中启动 notepad.exe,模拟您可能拥有的内容:

psexec -i 0 psexec -s -i 1 C:\windows\system32\Notepad.exe

此命令行启动使用 psexec 在会话 0(在系统帐户下)中启动自身,然后新的 psexec 调用 notepad.exe 以显示在我的会话(会话 1)中。它确实有效。 当然,您需要管理员权限才能运行这些命令。

【讨论】:

  • 嗯,你能在 localhost 上运行 PsExec 吗?
  • 来自 psexec 参考:计算机:指示 PsExec 在指定的计算机或计算机上运行应用程序。如果省略计算机名 PsExec 在本地系统上运行应用程序,如果输入计算机名“\*”,则 PsExec 在当前域中的所有计算机上运行应用程序。
  • 我对此投了赞成票,但由于某种原因,我无法让 PsExec 真正运行我的终端会话。很奇怪 - 运行 C:\\\PsExec.exe. 时我没有得到任何输出
  • 呸,不得不把它移出 C:\Windows\System32\。
猜你喜欢
  • 2020-12-05
  • 2020-11-19
  • 2014-09-21
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多