S SH. NET Как запустить программу и отключиться от s sh, продолжая работу программы? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть несколько программ opencv на некоторых Linux компьютерах. Теперь я хочу сделать программу c# в качестве переключателя на компьютере windows, чтобы открыть эту программу opencv.

У меня есть оригинальный код, который может открыть программу opencv

public void TrySomeSSh()
        {
            ConnectionInfo conInfo = new ConnectionInfo(ip, _port, _username, new AuthenticationMethod[]{
    new PasswordAuthenticationMethod(_username,_password)});
            SshClient sshClient = new SshClient(conInfo);
            sshClient.Connect();
            if (sshClient.IsConnected)
            {
                SshCommand output1;
                 output1 = sshClient.RunCommand("export DISPLAY=\"127.0.0.1:10.0\" ; /home/MyName/MyOpencvProgram ");
              Console.WriteLine(output1.CommandText);
              Console.WriteLine(output1.Execute());

            }
            else
            {
                Console.WriteLine("not connected");
            }
            sshClient.Disconnect();
            sshClient.Dispose();
        }

Однако есть некоторые проблемы:

  1. программа c# зависнет, потому что программа opencv все еще работает. Я не могу выполнять другие задания в моей программе c#.

  2. после отключения программа opencv на удаленном компьютере будет одновременно уничтожена.

Теперь я могу написать что-то вроде этого:

public void TrySomeSSh()
        {
            ConnectionInfo conInfo = new ConnectionInfo(ip, _port, _username, new AuthenticationMethod[]{
    new PasswordAuthenticationMethod(_username,_password)});
            SshClient sshClient = new SshClient(conInfo);
            sshClient.Connect();
            if (sshClient.IsConnected)
            {

                ShellStream shellStream = sshClient.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
                shellStream.WriteLine("export DISPLAY=\"127.0.0.1:10.0\"");
                shellStream.WriteLine("/home/MyName/MyOpencvProgram &");
                shellStream.WriteLine("disown -a");

                string line;
                while ((line = shellStream.ReadLine(TimeSpan.FromSeconds(2))) != null)
                {
                    string s = shellStream.Read();
                    Console.Write(s);
                }
            }
            else
            {
                Console.WriteLine("not connected");

            }
            Console.WriteLine("end connect");
            sshClient.Disconnect();
            sshClient.Dispose();
        }

как-то это может работать,

, но

  1. Я не могу найти ни одного способ сделать это с помощью SshCommand, так как ShellStream не рекомендуется.

  2. TimeSpan.FromSeconds (2) не совсем понятно, достаточно ли 2 секунды или нет.

Как правильно это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...