Этот вопрос отличается от вопроса, предложенного в качестве дубликата:
- Мой вопрос очень специфичен для .net-core . То есть даже если есть решение для «классического» .NET Framework, оно может быть неприменимо в среде .NET Core.
- Существует значительный (8 лет!) Промежуток времени между опубликованными вопросами.
Пожалуйста, не рассматривайте это как дубликат, потому что это не так.
Я не смог подключиться к stderr
и stdout
потокам процессов, которые были созданы вне процесса моего приложения .
targetProcessList
относится к типу List<System.Diagnostics.Process>
.
следующий код
foreach (var proc in targetProcessList)
{
proc.StandardError.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
proc.StandardOutput.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
}
приводит к InvalidOperationException
(возможно, потому что Процесс не настроен для такого использования):
[c:\ HRIS.Web] dotnet run : User profile is available. Using ' \AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
[c:\ HRIS.Web] dotnet run :
[c:\ HRIS.SPA] npm run start-prodish-for-e2e ||| [12044] cmd
[c:\ HRIS.SPA] npm run start-prodish-for-e2e ||| [11080] conhost
System.InvalidOperationException: StandardError has not been redirected.
at System.Diagnostics.Process.get_StandardError()
at RunE2E.Program.StartProcessViaCmd(String command, String arguments, String workingDirectory)
at RunE2E.Program.Main(String[] args)
System.NullReferenceException: Object reference not set to an instance of an object.
at RunE2E.Program.Main(String[] args)
Итак, я пытаюсь динамически включить перенаправление следующим образом:
foreach (var proc in targetProcessList)
{
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StandardError.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
proc.StandardOutput.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
}
но все еще получает удар во время выполнения
[c:\ \HRIS.Web] dotnet run : User profile is available. Using ' \AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
[c:\ \HRIS.Web] dotnet run :
[c:\ \HRIS.SPA] npm run start-prodish-for-e2e ||| [14952] cmd
[c:\ \HRIS.SPA] npm run start-prodish-for-e2e ||| [10784] conhost
System.InvalidOperationException: Process was not started by this object, so requested information cannot be determined.
at System.Diagnostics.Process.get_StartInfo()
at RunE2E.Program.StartProcessViaCmd(String command, String arguments, String workingDirectory)
at RunE2E.Program.Main(String[] args)
System.NullReferenceException: Object reference not set to an instance of an object.
at RunE2E.Program.Main(String[] args)
Есть ли способ обойти это?