C # запускает .exe через cmd с Юникодом, но ничего не возвращает, но работает в командной строке cmd - PullRequest
0 голосов
/ 02 марта 2019

Существует файл .exe на основе командной строки, в который я передаю параметры и хочу получить вывод в C #.Когда я непосредственно использую приглашение cmd, оно отлично работает и возвращает символы Юникода, такие как ╔ и ═, как часть вывода.

В C # я открываю процесс cmd.exe и передаю идентичные аргументы, как если бы я делалэто из командной строки cmd, и он просто ничего не возвращает.Я знаю, что это относится к символам Юникода, потому что, когда я ввожу аргументы для «справочной» информации (которая не включает в себя какой-либо Юникод), она прекрасно работает.

public string CMD(string input, bool validate=true)
    {
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(65001);
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.Verb = "runas";
        process.Start();
        process.StandardInput.WriteLine(input);
        process.StandardInput.Flush();
        process.StandardInput.Close();

        int i = 0;
        string cmd_result = process.StandardOutput.ReadToEnd();
        string output = "";
        foreach (string line in cmd_result.Split('\n'))
        {
            if (3 < i && i < cmd_result.Split('\n').Count() - 2)
            {
                output += line;
            }
            i++;
        }

        if (validate && output == "")
        {
            output = "Command failed";
        }

        return output;
    }

Вот когда я запускаю .exefile, переменная / строка url - это аргументы, которые я хочу передать в файл.

string output = CMD("qbt.exe " + url);
MessageBox.Show(output);

Всякий раз, когда программа не выводит Unicode, она отлично работает.Но если он содержит эти символы ╔ и =, вывод строки просто будет пустым.Как видно из функции CMD, я пытался добавить в процесс кодирование 65001, но это не помогло.Я также попробовал кодирование 850, но безуспешно.

Одна из идей, которые у меня были, заключалась в том, чтобы вместо этого запустить файл .bat и вывести его в файл, а затем с помощью C # просто прочитать содержимое файла.Но я сталкиваюсь с той же проблемой.

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