有一个基于命令行的.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#读取文件的内容。但是我遇到了同样的问题。