栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C#中执行批处理文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在C#中执行批处理文件

这应该工作。您可以尝试转储输出和错误流的内容,以便找出正在发生的情况:

static void ExecuteCommand(string command){    int exitCode;    ProcessStartInfo processInfo;    Process process;    processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);    processInfo.CreateNoWindow = true;    processInfo.UseShellExecute = false;    // *** Redirect the output ***    processInfo.RedirectStandardError = true;    processInfo.RedirectStandardOutput = true;    process = Process.Start(processInfo);    process.WaitForExit();    // *** Read the streams ***    // Warning: This approach can lead to deadlocks, see Edit #2    string output = process.StandardOutput.ReadToEnd();    string error = process.StandardError.ReadToEnd();    exitCode = process.ExitCode;    Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));    Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));    Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");    process.Close();}static void Main(){    ExecuteCommand("echo testing");}

编辑

鉴于您在下面的评论中提供的其他信息,我能够重现该问题。似乎有某种安全设置会导致此行为(尚未进行详细调查)。


工作,如果该批处理文件不位于

C:WindowsSystem32
。尝试将其移动到其他位置,例如可执行文件的位置。请注意,将自定义批处理文件或可执行文件保留在Windows目录中仍然是不好的做法。

EDIT 2 它原来的是,如果流被同步读取,可发生死锁,无论是由读取前同步

WaitForExit
或通过读取两个
stderr
stdout
同步一前一后。

如果改为使用异步读取方法,则不应发生这种情况,如以下示例所示:

static void ExecuteCommand(string command){    var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);    processInfo.CreateNoWindow = true;    processInfo.UseShellExecute = false;    processInfo.RedirectStandardError = true;    processInfo.RedirectStandardOutput = true;    var process = Process.Start(processInfo);    process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>        Console.WriteLine("output>>" + e.Data);    process.BeginOutputReadLine();    process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>        Console.WriteLine("error>>" + e.Data);    process.BeginErrorReadLine();    process.WaitForExit();    Console.WriteLine("ExitCode: {0}", process.ExitCode);    process.Close();}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/597008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号