Существует программа с именем mbinfo.exe
, которая является частью mbsystem . Он был разработан для Linux (https://github.com/dwcaress/MB-System). GMT (поставщик инструментов Geographi c) создает версию Windows, и я хочу вызвать ее, чтобы получить ее результат. Когда я запускаю его в терминале, он работает нормально:
But when I run it from C#, I cannot get the output. The C# code should be correct, because it can get output from other programs.
I tried to use ...> output.txt
in terminal, and it suprisingly write nothing into the file; instread, the output is still displayed on the screen. I guess it writes to the console with a special stream, neither stdout or stderr. I think it is possible because it is designed for Linux.
I provide the program on my website: скачать . Вы можете запустить команду
./mbinfo.exe -f 211 -i a.xtf
, чтобы проверить это.
Вот коды:
asyn c:
var tcs = new TaskCompletionSource<int>();
var process = new Process
{
StartInfo = new ProcessStartInfo()
{
FileName = GetFileName(),
Arguments = GetArgs(),
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardError = true,
RedirectStandardOutput = true
},
EnableRaisingEvents = true,
};
process.Exited += (sender, args) =>
{
tcs.SetResult(process.ExitCode);
process.Dispose();
};
process.ErrorDataReceived += Process_ErrorDataReceived;
process.OutputDataReceived += Process_ErrorDataReceived;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
return tcs.Task;
syn c:
var process = new Process
{
StartInfo = new ProcessStartInfo()
{
FileName = GetFileName(),
Arguments = GetArgs(),
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardError = true,
RedirectStandardInput = true,
RedirectStandardOutput = true
},
};
process.Start();
string result = process.StandardError.ReadToEnd() + process.StandardOutput.ReadToEnd();
process.WaitForExit();
return result;
Я даже пытался использовать Powershell SDK в C#, но все равно ничего не получил:
PowerShell ps = PowerShell.Create();
ps.AddScript(@"C:\programs\gmt5\bin\mbinfo.exe-f 211 -i C:\Users\autod\Desktop\test\a.xtf");
var result = ps.Invoke();
//return result[0].ToString();
Все get - пустой результат: ""
, а я может получить все результаты при запуске других exes.
Так что я думаю ключ к этой проблеме в том, что эта программа (mbinfo.exe
) использует нестандартный выходной поток, а не stdout / stderr. Я не знаю, как захватить этот поток в C#.
Может ли кто-нибудь помочь мне и подсказать, как решить эту проблему?