C#使用Process.Start()作为cmd和活动RedirectStandardOutput的参数来执行应用程序

时间:2018-07-03 11:15:41

标签: c# clickonce

我正在使用Visual Studio Clickones,并尝试执行(.appref-ms) application 并使用RedirectStandardOutput ...

我必须使用选项"Prefer 32-bit",因为我正在使用Access DB,连接字符串为Provider=Microsoft.Jet.OLEDB.4.0.

这是我的执行代码:

    var p = new Process();
    p.StartInfo = new ProcessStartInfo(@"C:\Users\hed-b\Desktop\PulserTester.appref-ms")
    {
        RedirectStandardOutput = true,
        UseShellExecute = false
    };
    p.Start();
    reportNumber = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

这是我遇到的错误

  

System.ComponentModel.Win32Exception:'指定的可执行文件不是   此OS平台的有效应用程序。'

编辑

通过看这里,我可以通过cmd运行它

.Net Core 2.0 Process.Start throws "The specified executable is not a valid application for this OS platform"

var proc = Process.Start(@"cmd.exe ",@"/c C:\Users\hed-b\Desktop\PulserTester.appref-ms")

但是如何以这种方式使用RedirectStandardOutput?

1 个答案:

答案 0 :(得分:3)

看起来您打算启动CMD并运行命令,但是您的代码只是尝试将该命令作为应用程序运行。

尝试这样的事情。

    var p = new Process();
    p.StartInfo = new ProcessStartInfo(@"cmd.exe")
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        Arguments = "/c C:\Users\hed-b\Desktop\PulserTester.appref-ms"
    };
    p.Start();
    reportNumber = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

使用阻塞ReadToEnd将在代码运行时暂停线程,并使捕获错误输出也更加困难-请查看此答案,以演示同时捕获标准数据和标准的非阻塞解决方案错误:ProcessInfo and RedirectStandardOutput