У нас есть консольное веб-приложение на основе kestrel, которое автоматически запускает ngrok при запуске. Мы используем Process.Start (), указывающий на ngrok.exe, затем в том же C# мы запрашиваем http://127.0.0.1: 4040 / api / tunnels , чтобы получить URL-адрес ngrok, чтобы мы могли синхронизировать c к внешней зависимости.
Это работает в Windows. В Linux - я использую MX Linux - когда я перебираю код в Rider, Process.Start возвращает true, и к тому времени, когда мы достигаем код для запроса http://127.0.0.1: 4040 / api / tunnels объект процесса все еще говорит .HasExited == false. Однако в этот момент происходит сбой (соединение отказано), и если я открываю другой терминал и wget -O - http://127.0.0.1:4040/api/tunnel
, который также не может подключиться, так что я действительно запутался, ngrok запустился или нет? Если в терминале я вручную перехожу туда, где исполняемый файл Linux для ngrok, и передаю те же аргументы, которые я передавал в Process.Start (), он запускается, заполняет экран, открывает другой терминал и пытается wget -O - http://127.0.0.1:4040/api/tunnel
он успешно соединяется и возвращает выходные данные.
Я имею в виду, если процесс не запускается с C#, почему Process.Start()
возвращает true? .. и почему объект процесса, даже после некоторого потока сна, скажет .HasExited
== false
?