当我从cmd运行以下内容时,它运行正常
>mysql -h 134.86.157.132 -u sas vm < c:\vm.sql
当我尝试从代码中执行相同操作时
ProcessStartInfo info = new ProcessStartInfo("mysql");
info.Arguments = @"-h 134.86.157.132 -u sas vm < c:\vm.sql";
info.Domain = "134.86.157.132";
info.UserName = "sas";
info.Arguments = @"vm < c:\vm.sql";
info.UseShellExecute = false;
Process.Start(info);
我在这里做错了什么?它不起作用,我得到一些错误的密码异常?
我现在就这样运行
ProcessStartInfo info = new ProcessStartInfo("mysql");
info.UseShellExecute = false;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.Arguments = @"-h 134.86.157.132 -u sas vm < c:\vm.sql";
Process.Start(info);
并获得以下错误The system cannot find the file specified
答案 0 :(得分:3)
试试这样:
ProcessStartInfo info = new ProcessStartInfo("mysql");
info.Arguments = @"-h 134.86.157.132 -u sas vm < c:\vm.sql";
info.UseShellExecute = false;
Process.Start(info);
答案 1 :(得分:3)
“ - h 134.86.157.132 -u sas vm”是参数,不要使用域和用户名。
您还需要重定向标准输入流以传递vm.sql文件。请参阅此示例:ProcessStartInfo.RedirectStandardInput Property
答案 2 :(得分:2)
您将UseShellExecute
设置为false,但它是解释“&lt;”的shell部分重定向文件中的stdin。
除非您需要UseShellExecute
为假的特定原因,否则请将其设置为true。或者,重定向新流程的标准输入,并直接为其提供数据。
编辑:如其他答案中所述,保留原始参数,不要在Domain
上设置UserName
/ ProcessStartInfo
。这些是指 Windows 用户名和域,而不是MySQL用户名。
此时你可以将UseShellExecute
设置为true,没有任何不良影响,运气好的话。
答案 3 :(得分:0)
来自this帖子的内容如何:
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = new StreamWriter(p.StandardInput))
{
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("mysql -h 134.86.157.132 -u sas vm < c:\vm.sql");
}
}