Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C通过cmd.exe运行多个命令#_C#_Mysql_Streamwriter - Fatal编程技术网

C# 使用C通过cmd.exe运行多个命令#

C# 使用C通过cmd.exe运行多个命令#,c#,mysql,streamwriter,C#,Mysql,Streamwriter,我试图在一个进程实例中运行多个命令,我所做的是工作,但在streamwriter中的第7或第8个命令之后,它将挂起,并且什么也不做 这是我的密码: Process p = new Process(); ProcessStartInfo info = new ProcessStartInfo(); info.FileName = "cmd.exe"; info.UseShellExecute = false; info.RedirectStandardInput = true; info.Redi

我试图在一个进程实例中运行多个命令,我所做的是工作,但在streamwriter中的第7或第8个命令之后,它将挂起,并且什么也不做

这是我的密码:

Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd.exe";
info.UseShellExecute = false;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.CreateNoWindow = true;
p.StartInfo = info;
p.Start();

using (StreamWriter sw = p.StandardInput)
{
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\a*.sql a_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\b*.sql b_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\c*.sql c_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\d*.sql d_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\e*.sql e_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\f*.sql f_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\g*.sql g_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\i*.sql i_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\l*.sql l_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\m*.sql m_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\n*.sql n_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\o*.sql o_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\p*.sql p_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\q*.sql q_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\r*.sql r_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\s*.sql s_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\t*.sql t_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\v*.sql v_updates.sql");
   sw.WriteLine("copy /b updates\\EDB-master\\tables\\w*.sql w_updates.sql");
}
p.WaitForExit();
我知道我可以把所有的SQL文件都写到一个文件中,但我之所以选择第一个字母,是因为对于一个SQL导入量很大的默认MySQL服务器来说,它的数据包太大了。(该程序是公开发布的,不愿意让每个人编辑他们的最大数据包大小,只是为了使用该应用程序)


因此,我基本上需要帮助的是弄清楚为什么它只执行部分命令,或者是否有其他方法可以做到这一点

我看到您同时重定向StdIn和StdOut,但一旦启动该过程,您只会向StdIn写入,但不会为StdOut重定向提供任何接收器。所以,可能发生的情况是,子进程正在写入,没有任何内容正在读取,所以当StdOut已满时,它会阻塞,从而导致死锁。尝试设置
RedirectStandardOutput=false
就可以了。

从另一篇文章中得到了这个答案


在自己的控制台中运行cmd很有效。

只是一个建议,你考虑过改用它吗?@JohnGibb,你删除的评论对我很有效。在它自己的控制台应用程序中运行它。非常感谢。(不,我没有试过文件。改为复制,这并不是我想要走的路线)好的,这是一个进步,谢谢,但现在它在13号命令停止,不再继续!同时将
RedirectStandardError
设置为false。也就是说,只重定向那些你计划自己处理的流,所有其他流都按原样离开。我几周前刚做了一个小程序,只重定向了StdOut,并且运行没有问题。。。但是标准,不是标准。。。也许StdIn是不同的,但如果是这样的话,我会感到惊讶。我很确定StdErr是代码中的第二个罪犯。是的,我打赌你是对的。我要删除我以前的评论,以免将来让人困惑!