从C#运行命令提示符命令不起作用

时间:2019-05-16 01:37:09

标签: c# ubuntu windows-subsystem-for-linux

关于如何从c#运行命令提示符命令的例子很多。例如,这是一个很好的例子:

https://stackoverflow.com/a/32872174/637142

我需要从c#运行此linux命令:

rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/

您可以跳过此部分:

  

WSL代表“ Linux的Windows子系统” https://docs.microsoft.com/en-us/windows/wsl/install-win10。该Windows应用程序使您可以在Windows计算机上安装Ubuntu。为了安装它,您必须在Windows上使用WSL。该答案说明了如何:https://stackoverflow.com/a/36465000/637142。启用WSL后,您可以从Windows应用商店中安装Ubuntu。

     

rsync是我在ubuntu上使用的命令,用于在两台计算机之间同步文件。如果我在Windows上打开Ubuntu应用程序并运行rsync -av -e 'ssh -i /root/key.rsa' /root/sourceDir/ root@someDomain.com:/root/destDir,它会要求我输入密码,那么同步就很好了。

     

这是一个很棒的链接,它解释了如何在Windows上运行wsl命令:https://devblogs.microsoft.com/commandline/a-guide-to-invoking-wsl/

如果有人能告诉我我做错了,我将不胜感激。无论如何,这就是我在做什么: *要使其正常工作,您必须定位x64 **

  1. 首先确保我的命令有效。如果我打开ubuntu Windows应用程序,然后运行rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/,那么效果很好!

  2. 现在,我必须在没有Ubuntu的情况下执行,因此我打开命令提示符并键入相同的命令,但开头应使用wslwsl rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/以下是证明: enter image description here 如果再输入密码,同步效果会很好!

  3. 现在是我想从C#中执行此操作的部分。这是使用更简单命令的可行解决方案:https://stackoverflow.com/a/56159293/637142

  4. 现在,我准备从c#执行真正的命令!而且它不起作用。为什么?

          var cmd = @"wsl rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/";
    
            using (var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = @"cmd.exe",
                    //Arguments = cmd,
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    RedirectStandardInput = true,
                    CreateNoWindow = true,
                    WorkingDirectory = @"C:\Users\Antonio"
                }
            })
            {
                proc.Start();
    
    
                // send command
                proc.StandardInput.WriteLine(cmd);
                proc.StandardInput.Flush();
    
                // wait
                System.Threading.Thread.Sleep(500);
    
                // send password
                proc.StandardInput.WriteLine("MyPassword!");
                proc.StandardInput.Flush();
                proc.StandardInput.Close();
    
                // wait for sync to complete
                proc.WaitForExit();
                Console.WriteLine(proc.StandardOutput.ReadToEnd());
            }
    

我什至无法找到要求输入密码的部分

0 个答案:

没有答案