如何从没有控制台窗口的 C/C++ 执行批处理文件?

Posted

技术标签:

【中文标题】如何从没有控制台窗口的 C/C++ 执行批处理文件?【英文标题】:how to execute batch file from C/C++ w/o console window? 【发布时间】:2011-07-12 21:29:34 【问题描述】:

我正在通过 system("start /B mybatch.bat") 调用从 C++ 程序执行批处理文件,其中 /B 应该在没有控制台窗口的情况下运行批处理文件。但它仍然可见。

编辑:我按照 cmets 中的建议通过 ShellExecute() 解决了这个问题

【问题讨论】:

【参考方案1】:

你为什么不改用 CreateProcess 呢?

【讨论】:

或ShellExecute,这可能更简单。 @user: ShellExecute 不允许你传入STARTUPINFO 结构,它允许隐藏窗口。 @Ben Voigt:但它确实有 nShowCmd。我不知道它是否适用于 OP,但我认为替代功能值得一提。 我使用system() 调用只是因为它非常简单。我没有看到这个调用控制台窗口,我看到了由start /B mybatch.bat 执行的批处理文件控制台窗口。这个标志应该在不创建新窗口的情况下运行命令:Start application without creating a new window. The application has ^C handling ignored. Unless the application enables ^C processing, ^Break is the only way to interrupt the application. 我是否误解了这个语句,是在同一个窗口中批量执行,而不是像start 命令通常那样启动单独的进程?【参考方案2】:

在 Windows 上,如果您不使用 Windows Runtime,可以尝试_popen_wpopen:MSDN。

我使用它主要是因为_popen 创建了一个管道,因此我也可以轻松读取输出。

【讨论】:

以上是关于如何从没有控制台窗口的 C/C++ 执行批处理文件?的主要内容,如果未能解决你的问题,请参考以下文章

在运行时创建的控件没有窗口。无法从没有窗口的视图中显示弹出框

iBooks 打开 PDF -“无法从没有窗口的视图中呈现弹出窗口”

UITableViewController :“无法从没有窗口的视图中呈现弹出框。”

从没有表单的URL保存图像(Symfony 3)

如何在 Eclipse 中将执行显示输出到远程 C++ 的控制台?

UIPopoverController & UIImagePickerControl:“无法从没有窗口的视图中呈现弹出框”