Чтение вывода из WSL.Exe в C# ⇐ C#

Место общения программистов C#
Anonymous
Чтение вывода из WSL.Exe в C#

Сообщение Anonymous »

У меня есть следующая проблема: я хочу проверить, установлен ли WSL2 или если она все еще нужно установить. />

Код: Выделить всё

public static async Task IsWsl2AvailableAsync()
{
try
{
var psi = new ProcessStartInfo
{
FileName = "wsl.exe",
Arguments = "--status",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
StandardOutputEncoding = Encoding.UTF8,
StandardErrorEncoding = Encoding.UTF8
};

using var process = new Process { StartInfo = psi };
process.Start();

string output = await process.StandardOutput.ReadToEndAsync();
string error = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();

MessageBox.Show($"[stdout]\n{output}\n\n[stderr]\n{error}", "WSL STATUS");

return output.Contains("Default Version: 2", StringComparison.OrdinalIgnoreCase);
}
catch (Exception ex)
{
MessageBox.Show($"Error: {ex.Message}");
return false;
}
}
Вывод Messagebox всегда:

Код: Выделить всё

[stdout]
S

[stderr]

Я также попытался запустить wsl в cmd или powershell, чтобы прочитать выход там, но это дает тот же результат.


Подробнее здесь: https://stackoverflow.com/questions/796 ... in-c-sharp

Вернуться в «C#»