【问题标题】:Passing arguments to running process in C#在 C# 中将参数传递给正在运行的进程
【发布时间】:2011-10-08 21:34:56
【问题描述】:

我在运行进程并将参数传递给它们时遇到了一些麻烦。 我知道如何使用一些参数运行进程

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c something");  
Process p = Process.Start(psi)

问题是脚本执行后进程终止。这就是为什么有“/c”

但我正在运行多个脚本,我想在一个进程(“cmd.exe”)中运行它们,而不是每次都启动新进程。

有解决办法吗?

我希望有人能理解我在说什么;)

【问题讨论】:

  • 首先想到的是创建一个批处理文件,尽管.net 中可能有更好的东西。
  • 您是否控制您尝试将参数传递给的程序的应用程序逻辑?

标签: c# process cmd


【解决方案1】:

我建议您使用批处理文件来编写可执行文件的执行脚本,并改为调用您的批处理文件。或者,you can do this -

    Process p = new Process();
    ProcessStartInfo info = new ProcessStartInfo();
    info.FileName = "cmd.exe";
    info.RedirectStandardInput = true;
    info.UseShellExecute = false;

    p.StartInfo = info;
    p.Start();

    using (StreamWriter sw = new StreamWriter(p.StandardInput))
    {
        if (sw.BaseStream.CanWrite)
        {
            sw.WriteLine("mysql -u root -p");
            sw.WriteLine("mypassword");
            sw.WriteLine("use mydb;");
        }
    }

【讨论】:

  • 你真的不需要做streamwriter writeline。你可以调用 p.startinfo.filename = "cmd.exe"; p.startinfo.Arguments = "废话"; p.start(); p.waitforexit(); p.close();
  • 谢谢它非常有帮助,但我仍然有一些问题。
  • 我尝试创建 Process 并在类的构造函数中启动它,然后在运行脚本时从该类调用方法。但是当我开始进程时,它同时退出了
  • @kosa:你能把你的代码发布到 pastebin 并给我链接吗?
  • 你忘了说新进程。
【解决方案2】:

听起来您应该研究重定向标准输入 - 确保还将 psi.UseShellExecute 设置为 false。您可能还想重定向标准输出,因此您可以通过某种方式了解您的子进程在做什么。

详细了解重定向here

【讨论】:

  • 为时已晚 - 0A0D 拥有它。
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
相关资源
最近更新 更多