我如何开始这个过程有什么问题?

时间:2010-12-08 15:50:51

标签: c# .net

当我从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

4 个答案:

答案 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");
            }
        }