【问题标题】:Unable to run exe from C# Process Class无法从 C# 进程类运行 exe
【发布时间】:2014-09-04 06:28:16
【问题描述】:

我正在尝试从 C#.NET Process 类执行一个 .exe 文件,但我无法这样做。我能够从命令提示符成功运行 .exe。

下面是成功的命令提示符输出

我正在使用下面的 C# 代码。我没有在下面的代码之外做任何事情。

            string output = string.Empty;
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.WorkingDirectory = @"C:\Windows\System32";
            myProcess.StartInfo.FileName = "pdftotext.exe";
            myProcess.StartInfo.Arguments = " -?";
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.RedirectStandardError = true;
            myProcess.StartInfo.RedirectStandardInput = true;
            myProcess.StartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo.Verb = "runas";
            myProcess.Start();

            using (StreamReader streamReader = myProcess.StandardOutput)
                output = streamReader.ReadToEnd();

            MessageBox.Show("Output = " + output);

下面是上面代码的输出。

【问题讨论】:

  • 是什么让你认为exe文件在那个文件夹中? (它可以在您的PATH 中的任何位置,以便命令行使用。)
  • 我复制粘贴了他们的pdftotext.exe(即C:\Windows\System32\pdftotext.exe)
  • 我想知道你是否得到了输出,但这根本不是你所期望的。调试时,消息框显示在哪一行;如果包含代码中的那个,则执行成功。然后,您可以使用 Process Explorer 之类的工具来查看该进程实际上是如何启动的。
  • 它在代码中被提及。它正是在代码中提到的地方,即在 using 子句之后。
  • 抱歉,遗漏了一点:改进您问题的文本。在任何情况下,您似乎都在接收来自 exe 的输出,您需要关注您传递给 .NET 的信息,以及这些信息是如何传递给 exe 的(所以看看它所看到的命令行参数)。

标签: .net winforms process cmd exe


【解决方案1】:
myProcess.StartInfo.FileName = "pdftotext.exe"; 

不要放整个文件路径,它只是要求文件名。

编辑

看到我在最后尝试了相同的代码,它在我的控制台中正确地给了我输出:

Process myProcess = new Process();


            string output = string.Empty;
            myProcess.StartInfo.UseShellExecute = false;
            // myProcess.StartInfo.WorkingDirectory = @"C:\Windows\System32";
            myProcess.StartInfo.FileName = @"TRACERT.EXE";

            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.RedirectStandardError = true;
            myProcess.StartInfo.RedirectStandardInput = true;
            myProcess.StartInfo.RedirectStandardOutput = true;
            //myProcess.StartInfo.Verb = "runas";
            myProcess.Start();

            //Process myProcess =   Process.Start("TRACERT.EXE");

            using (StreamReader streamReader = myProcess.StandardOutput)
            {
                output = streamReader.ReadToEnd();
            }


            Console.WriteLine(output);
            Console.ReadLine();

【讨论】:

  • 什么都不显示(即 MessageBox.Show(output) 什么都不显示(空))
  • 尝试刷新您的 streamReader。即,streamReader.Flush();
  • streamReader 没有刷新方法 StreamWriter 有刷新方法
  • 哦,对不起...我的错...让我看看
  • 解决了!!谢谢大家
【解决方案2】:

以下是此代码的成功执行。我不知道为什么我的 .exe 文件的输出包含在 myProcess.StandardError 中而不是 myProcess.StandardOutput 中

我只是给了它不同的参数 "myProcess.StartInfo.Arguments = "-layout D:\Projects\OCR\Invoices\Sample.pdf" 并且效果很好

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();

        string output = string.Empty;
        string error = string.Empty;

        myProcess.StartInfo.UseShellExecute = false;
        myProcess.StartInfo.FileName = "pdftotext.exe";
        myProcess.StartInfo.Arguments = "-layout D:\\Projects\\OCR\\Invoices\\Sample.pdf D:\\Projects\\OCR\\Invoices\\Sample.txt";
        myProcess.StartInfo.CreateNoWindow = true;
        myProcess.StartInfo.UseShellExecute = false;
        myProcess.StartInfo.RedirectStandardError = true;
        myProcess.StartInfo.RedirectStandardInput = true;
        myProcess.StartInfo.RedirectStandardOutput = true;
        myProcess.StartInfo.Verb = "runas";
        myProcess.Start();

        using (StreamReader streamReader = myProcess.StandardOutput)
            output = streamReader.ReadToEnd();

        using (StreamReader streamReader = myProcess.StandardError)
            error = streamReader.ReadToEnd();

        if (myProcess.ExitCode > 0)
            throw new Exception(ErrorCode(myProcess.ExitCode));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多