【问题标题】:How would I migrate to a new process in C?我将如何迁移到 C 中的新进程?
【发布时间】:2012-09-30 10:19:20
【问题描述】:

这是一个相当复杂的过程,所以请多多包涵! 无论如何,这个概念是直截了当的:

我有一个 C 程序,它根据用户输入生成一个批处理文件并执行它。在所有情况下,批处理文件都会打开一个新终端。我希望我的程序通过新终端执行设置命令。

我 99% 肯定我需要为此使用 Win32 API,并且完全可以接受这个挑战,但我只是想朝着正确的方向稍微推动一下。

关于如何设计这样一个程序有什么建议吗?

非常感谢您的宝贵时间!

【问题讨论】:

  • 如果您的程序正在生成批处理文件,为什么还需要将数据提供给标准输入?不能直接放到批处理文件里吗?
  • 没有。命令需要通过新终端执行。
  • 我想你很困惑。您应该很高兴能够将您的命令编码到一个批处理文件中并在一个新进程中启动该批处理文件。无论如何,执行批处理文件确实会在新终端中运行它们,您只会减慢进程。
  • 我真的只给出了大图的一小部分;批处理文件当然会打开一个新终端,但它也会在 之后生成一个终端。正是这个最终终端需要接受我的意见。是的,它没有多大意义,哈哈,但我确实需要它像那样操作。或者这就是你所说的,我真的很困惑?

标签: c winapi process


【解决方案1】:

当您使用CreateProcess() 启动批处理脚本时,您可以为标准输入和标准输出指定使用CreatePipe() 创建的自定义管道。这将允许您的应用程序通过通过管道发送任何命令来控制应用程序。

如果你只指定标准输入管道,那么输出仍然会被发送到它自己的控制台窗口。

【讨论】:

  • 谢谢,这看起来很有希望。我会看看会发生什么。
【解决方案2】:

最简单的方法是将Message(WM_CHAR) 发送到新的控制台窗口,但这不是错误证明。

正确的方法是 CreateProcess() 带有 STARTF_USESTDHANDLES 标志。查看示例here

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 2018-03-09
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多