我有一个批处理文件,如果我在命令提示符下提供此命令,则运行完全正常。
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";
}
答案 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");