【发布时间】:2011-05-29 18:04:50
【问题描述】:
很抱歉,如果之前已经介绍过,但我在 StackOverflow 上的任何地方都找不到。
基本上,我正在尝试运行您通常在 Windows 命令提示符下运行的东西:
msiexec /i file.msi /q
和我的 C 程序中的其他类型的命令。这可能吗?
谢谢。
【问题讨论】:
很抱歉,如果之前已经介绍过,但我在 StackOverflow 上的任何地方都找不到。
基本上,我正在尝试运行您通常在 Windows 命令提示符下运行的东西:
msiexec /i file.msi /q
和我的 C 程序中的其他类型的命令。这可能吗?
谢谢。
【问题讨论】:
在 Windows 中使用 Win API ShellExecute 将使您能够最好地控制您的子进程。但是 Dave18 和 Pablo 提到的其他两种方法也可以。
【讨论】:
试试Csystem函数
#include <stdlib.h>
int main ()
{
system ("msiexec /i file.msi /q");
return 0;
}
【讨论】:
【讨论】:
Pablo 和 Dave 是对的,这取决于你想做什么。
execl 将新应用程序加载到内存中并运行它来代替当前进程。您的程序将在execl() 调用后结束。
系统在子shell中运行应用程序,您可以检索它的退出状态,但不能检索有关它的标准输入/标准输出数据的任何信息。
您对开始流程后会发生什么感兴趣?
【讨论】:
system 创建一个子shell并执行你的字符串。它没有给你太多的控制权。 fork 然后execl 是常见的习惯用法,如果您对其中的内容更感兴趣(与您的分叉进程的 fd 交互)