Start.Process (). net Ядро не работает в Linux Docker - PullRequest
1 голос
/ 08 мая 2020

Я создал контейнер docker с ASP. net Core Service. Однако эта служба должна запустить другую службу внутри контейнера docker. Проблема, с которой я столкнулся прямо сейчас, заключается в том, что Process.Start (), похоже, не работает в этом контейнере Linux.

Это то, что я пробовал до сих пор:

            Process process;
            ProcessStartInfo processInfo;

            string fileName = "bin/bash dotnet run /root/SubService/SubService.API.dll";
            string arguments = $"Company --urls http://localhost:5000/SolutionName";
            string escapedArguments  = $"-c /{arguments}/";

            processInfo = new ProcessStartInfo(escapedFilename, escapedArguments)
            {
                CreateNoWindow = true,
                UseShellExecute = false,
                WindowStyle = ProcessWindowStyle.Hidden,
                RedirectStandardError = false,
                RedirectStandardOutput = false
            };

            try
            {
                process = Process.Start(processInfo);
                process.WaitForExit();
                process.Close();
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }

Когда вызывается Process.Start (processInfo), я получаю исключение «Нет такого файла или каталога». Но путь правильный. В чем может быть проблема? Или есть альтернативный способ запустить процесс из asp. net основной службы.

Спасибо.

1 Ответ

0 голосов
/ 10 мая 2020

После еще нескольких тестов проблема, похоже, заключалась в неправильном использовании метода Process.Start (). На этот раз были использованы аргументы.

Вот как это работало:

            Process process;
            string outputStream;
            string errorStream;

            try
            {
                string fileName = "dotnet";
                string arguments = $"{subServiceData.ApplicationPath} {subServiceData.SolutionName} --urls { subServiceData.SubServiceUrl}";
                process = Process.Start(fileName, arguments);
                process.WaitForExit();

                // *** Read the streams ***
                outputStream = process.StandardOutput.ReadToEnd();
                errorStream = process.StandardError.ReadToEnd();

                int exitCode = process.ExitCode;
                process.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...