C#console app无法运行批处理文件,但批处理文件在命令提示符下正常工作

时间:2014-01-13 03:39:51

标签: c# c#-4.0 batch-file console-application batch-processing

我有一个批处理文件,如果我在命令提示符下提供此命令,则运行完全正常。

C:\app> C:\app\Process.bat C:\app\files\uploads c:\app\files file2 <- WORKS

所以只有3个输入参数。

C:\app\files\uploads : the folder location of input files 
c:\app\files         : the output folder
file2                : output file name

如果我从C:\ app文件夹运行批处理文件,我会看到输出文件 我想从将要安排作业的控制台应用程序自动化该过程 但是在visual studio调试模式下运行或单击exe文件什么都不做。 我也没有任何例外。

什么可能是错的 - 许可或其他我做错了?

这是C#代码

static void Main(string[] args)
        {
            RunBatchFile(@"C:\app\Process.bat", @"C:\app\files\uploads c:\app\files 123456");
        }

public static string RunBatchFile(string fullPathToBatch, string args)
        {            
            using (var proc = new Process
            {
                StartInfo =
                {
                    Arguments = args,                    
                    FileName = fullPathToBatch,

                    UseShellExecute = false,
                    CreateNoWindow = true,
                    RedirectStandardOutput = false,
                    RedirectStandardError = false
                }
            })
            {
                try
                {
                    proc.Start();
                }
                catch (Win32Exception e)
                {
                    if (e.NativeErrorCode == 2)
                    {
                        return "File not found exception";
                    }
                    else if (e.NativeErrorCode == 5)
                    {
                        return "Access Denied Exception";
                    }
                }
            }

            return "OK";
        }

1 个答案:

答案 0 :(得分:1)

这里有2个问题:

第一个问题是您需要执行cmd.exe而不是批处理文件 其次,您正在执行它,但您需要等待该过程完成。您的应用程序是父进程,因为您没有等待子进程无法完成。

您需要发出WaitForExit():

var process = Process.Start(...);
process.WaitForExit();

这是你想要做的:

static void ExecuteCommand(string command)
{
    int exitCode;
    ProcessStartInfo processInfo;
    Process process;

    processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
    processInfo.CreateNoWindow = true;
    processInfo.UseShellExecute = false;
    process = Process.Start(processInfo);
    process.WaitForExit();
    exitCode = process.ExitCode;
    process.Close();
}

要运行批处理文件,请从main():

执行此操作
ExecuteCommand("C:\app\Process.bat C:\app\files\uploads c:\app\files file2");