C#使用Unicode通过cmd运行.exe,但不返回任何内容,但可以在cmd提示符下运行

时间:2019-03-02 14:23:51

标签: c# unicode cmd

有一个基于命令行的.exe文件,我正在向其中传递参数,并希望从C#中获得输出。当我直接使用cmd提示符时,它可以完美地工作,并在输出中返回╔和like之类的Unicode字符。

在C#中,我正在打开cmd.exe进程并传递相同的参数,就好像我是从cmd提示符中进行操作一样,它根本不返回任何内容。我知道这与unicode字符有关,因为当我输入“ help”信息(不包括任何unicode)的参数时,它的工作原理就很好。

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;
    }

这是当我运行.exe文件时,url变量/字符串是我希望传递到文件中的参数。

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

只要程序不输出unicode,它就可以正常工作。但是,如果确实包含那些╔和═字符,则字符串输出只是空的。从CMD函数中可以看出,我尝试将65001编码添加到进程中,但这似乎无济于事。我也尝试过850编码,但也没有运气。

我的一个主意是改为运行.bat文件并输出到文件,然后使用C#读取文件的内容。但是我遇到了同样的问题。

0 个答案:

没有答案