Есть много примеров того, как запускать команды командной строки из c #.Например, это отличный пример:
https://stackoverflow.com/a/32872174/637142
Мне нужно запустить эту команду Linux из c #:
rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/
Вы можете пропустить эту часть:
WSL означает «Подсистема Windows для Linux» https://docs.microsoft.com/en-us/windows/wsl/install-win10.Это приложение для Windows позволяет вам установить Ubuntu на компьютер с Windows.Для того, чтобы установить его, вы должны WSL на Windows.Этот ответ объясняет, как: https://stackoverflow.com/a/36465000/637142.После включения WSL вы можете установить Ubuntu из магазина приложений Windows.
rsync - это команда, которую я использую в Ubuntu для синхронизации файлов между двумя компьютерами.Если я открываю приложение Ubuntu в Windows и запускаю rsync -av -e 'ssh -i /root/key.rsa' /root/sourceDir/ root@someDomain.com:/root/destDir
, он запрашивает у меня пароль, и синхронизация завершается отлично.
Это отличная ссылка, которая объясняет, как запускать команды wsl в Windows: https://devblogs.microsoft.com/commandline/a-guide-to-invoking-wsl/
Буду признателен, если кто-нибудь скажет мне, что я делаю неправильно.В любом случае, вот что я делаю: * Чтобы это работало, вы должны нацелиться на x64 **
Сначала убедитесь, что моя команда работает.Если я открою свое приложение для Windows с Ubuntu и запусту rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/
, оно прекрасно работает!
Теперь я должен сделать это без Ubuntu, поэтому я открываю командную строку и набираюта же команда, но с wsl
в начале.wsl rsync -av -e 'ssh -i /root/k/ws.k' /mnt/c/GIT/Ublux root@ws.ublux.com:/ublux/
Вот доказательство:
Если я затем введу пароль, синхронизация работает отлично!
Теперь наступает момент, когда я хочу это сделатьиз C #.Вот рабочее решение с более простой командой: https://stackoverflow.com/a/56159293/637142
Теперь я готов выполнить настоящую команду из 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());
}
Я даже не могу получить часть, где он запрашивает пароль