Выполнить команду dotnet с процессом в C # - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующие строки кода C #, где открывают процесс и запускают команду dotnet, чтобы открыть мое консольное приложение (созданное с помощью .net standard / core)

var args = new Dictionary<string, string> {
 { "-p", "title"},
 { "-l", "games"},
 ...
};

var arguments = string.Join(" ", args.Select((k) => string.Format("{0} {1}", k.Key, "\"" + k.Value + "\"")));

var dllPath = @"C:\Users\xyz\Documents\Visual Studio 2017\myConsole\bin\Debug\netcoreapp2.1\myConsole.dll";
ProcessStartInfo procStartInfo = new ProcessStartInfo();
procStartInfo.FileName = "C:\....\cmd.exe";
procStartInfo.Arguments = $"dotnet \"{dllPath}\" {arguments}";
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = false;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;

StringBuilder sb = new StringBuilder();
Process pr = new Process();
pr.StartInfo = procStartInfo;

pr.OutputDataReceived += (s, ev) =>
{
    if (string.IsNullOrWhiteSpace(ev.Data))
    {
        return;
    }

    string[] split = ev.Data.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    int.TryParse(split[split.Length - 1], out output);
};

pr.ErrorDataReceived += (s, err) =>
{
    // do stuff here
};

pr.EnableRaisingEvents = true;
pr.Start();
pr.BeginOutputReadLine();
pr.BeginErrorReadLine();

pr.WaitForExit();

Команда Arguments результат:

dotnet "C:\Users\xyz\Documents\Visual Studio 2017\myConsole\bin\Debug\netcoreapp2.1\myConsole.dll" -p "title" -l "games" -s "" -r "none" -k "0" -d "/path/" -f ""

Но для ev.Data из OutputDataReceived событие выглядит так:

Microsoft Windows [Version 10.0.16299.665]
(c) 2017 Microsoft Corporation. All rights reserved.

и это все ...

Я ожидал запустить команду dotnet в dll.

Если я запускаю вручную команду результата dotnet .... выше, работает нормально.Но не из моего кода C #.Почему?

1 Ответ

0 голосов
/ 24 сентября 2018

Поскольку cmd возвращает:

Microsoft Windows [Version 10.0.16299.665] 
(c) 2017 Microsoft Corporation. All rights reserved.

Вам нужно позвонить

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