开发者

What is wrong in how I start the process?

When I run the following from cmd it runs ok

>mysql -h 134.86.157.132 -u sas vm < c:\vm.sql

When I try to do the same from code it does not work

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);

What am I doing wrong here? It does not work and I get some wrong password exception?

Edit:

I run it like this now

            ProcessStartInfo info = new ProcessStartInfo("mysql");
            info.UseShellExecute = false;
            info.RedirectStandardInput = true;
            info.RedirectStandardOutput = tru开发者_运维百科e;
            info.RedirectStandardError = true;
            info.Arguments = @"-h 134.86.157.132 -u sas vm < c:\vm.sql";
            Process.Start(info);

and get following error The system cannot find the file specified


"-h 134.86.157.132 -u sas vm" are the arguments, don't use domain and username.

You also need to redirect the standard input stream to pass your vm.sql file in. See this example: ProcessStartInfo.RedirectStandardInput Property


Try it like this:

ProcessStartInfo info = new ProcessStartInfo("mysql");
info.Arguments = @"-h 134.86.157.132 -u sas vm < c:\vm.sql";
info.UseShellExecute = false;
Process.Start(info);


You're setting UseShellExecute to false, but it's the shell that interprets the "<" part to redirect stdin from a file.

Unless there's a specific reason why you need UseShellExecute to be false, set it to true. Alternatively, redirect standard input for the new process, and give it the data directly.

EDIT: As specified in other answers, keep the original arguments, and don't set Domain/UserName on the ProcessStartInfo. Those refer to Windows usernames and domains, not MySQL ones.

At that point you'll be able to set UseShellExecute to true with no ill effects, with any luck.


How about something like from this post:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜