从C#运行.bat文件并不像打开.bat文件那样工作

时间:2018-03-28 17:27:24

标签: c# batch-file

我正在尝试获取进程的输出。我通过使用.bat实现了这一点,它包含以下文本:

program.exe > output.txt < input.txt

其中program.exe是我的可执行文件,output.txt是我要输出数据的文件,而input.txt只是一个空文件,因为程序不时需要键输入。我自己运行它时,.bat文件运行得很好,但是当我尝试使用C#代码运行它时,它只是没有正确完成。 我试图使用以下代码运行它:

Process.Start(path);

我尝试了很多不同的东西,但这是我上次尝试过的代码,但我的尝试都没有。此外,当您以管理员身份运行它时,.bat文件无法正常运行,而我正在使用的C#程序需要管理员权限。这可能是问题,而不是实际运行过程吗?

3 个答案:

答案 0 :(得分:1)

您需要运行流程cmd.exe /c [path](也就是流程是&#34; cmd.exe&#34;,您的参数是$"/c {path}"

当您在命令提示符下执行&#34;程序执行&#34;和&#34; .bat / .cmd交互式脚本&#34;。由于您要执行批处理文件,因此需要告诉CreateProcess cmd.exe实际上正在运行它。

答案 1 :(得分:0)

这个问题正是我的想法。从提升的应用程序启动时,.bat文件无法正常工作。为了解决这个问题,我使用了这个:

Process.Start("explorer.exe", path);

工作完美。很快就解决了这个问题,但是如果有人发现自己被同样的事情困住了,我想把它留在这里。

答案 2 :(得分:0)

ProcessStartInfo 中,您应该将 UseShellExecute 设置为 false,然后在您发现蝙蝠正常工作的路径中设置 WorkingDirectory。 下面是一个让你更好理解的例子:

using (Process MyProcess = new Process())
{
    var MyProcessInfo = new ProcessStartInfo()
    {
        UseShellExecute = false,
        WorkingDirectory = "path",
        FileName = "file.exe",
        Arguments = "args"
    };
    MyProcess.StartInfo = MyProcessInfo;
    MyProcess.Start();
}