【问题标题】:Command line commands with C带有 C 的命令行命令
【发布时间】:2011-05-29 18:04:50
【问题描述】:

很抱歉,如果之前已经介绍过,但我在 StackOverflow 上的任何地方都找不到。

基本上,我正在尝试运行您通常在 Windows 命令提示符下运行的东西:

msiexec /i file.msi /q

和我的 C 程序中的其他类型的命令。这可能吗?

谢谢。

【问题讨论】:

    标签: c windows-7


    【解决方案1】:

    在 Windows 中使用 Win API ShellExecute 将使您能够最好地控制您的子进程。但是 Dave18 和 Pablo 提到的其他两种方法也可以。

    【讨论】:

      【解决方案2】:

      试试Csystem函数

      #include <stdlib.h>
      
      int main ()
      {
      
        system ("msiexec /i file.msi /q");
        return 0;
      }
      

      【讨论】:

        【解决方案3】:

        您需要使用exec 系列函数中的一个函数。 Here's 他们的名单。

        因此,要运行您的示例,您可以使用:

        execl("msiexec","/i","file.msi","/q",NULL);
        

        【讨论】:

        • -1 execl 不是 C89 也不是 C99 -> 没有标准 C;它是 POSIX 90,因此包含在 windows 编译器中,没有保证。请参阅下面的系统示例,该示例将起作用。
        【解决方案4】:

        Pablo 和 Dave 是对的,这取决于你想做什么。

        execl 将新应用程序加载到内存中并运行它来代替当前进程。您的程序将在execl() 调用后结束。

        系统在子shell中运行应用程序,您可以检索它的退出状态,但不能检索有关它的标准输入/标准输出数据的任何信息。

        您对开始流程后会发生什么感兴趣?

        【讨论】:

        • 既然你问了,最好在我的程序执行和退出时“持有”它。
        • system 创建一个子shell并执行你的字符串。它没有给你太多的控制权。 fork 然后execl 是常见的习惯用法,如果您对其中的内容更感兴趣(与您的分叉进程的 fd 交互)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多