windows 发出WSL命令并从C#读取返回值

3qpi33ja  于 2023-01-18  发布在  Windows
关注(0)|答案(1)|浏览(148)

我正在写一段代码来执行一些针对wsl的命令,解析和阅读返回值很重要。
项目是.net核心控制台应用程序3.1
wsl2已在系统上启用
例如,列出我本地机器上所有可用的wsl图像时,我使用的是在另一个“相关”的SO帖子中提供的答案中找到的片段。

using (var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = @"cmd.exe",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardInput = true,
                    CreateNoWindow = true,
                }
            })
            {
                proc.Start();
                proc.StandardInput.WriteLine("wsl --list");
                System.Threading.Thread.Sleep(500);
                proc.StandardInput.Flush();
                proc.StandardInput.Close();
                proc.WaitForExit(5000);
                var c = proc.StandardOutput.ReadToEnd();
                Console.WriteLine(c);
                Console.ReadLine();
            }

现在预期输出应该是

我得到的是

如果我使用断点进行检查,我会在“var c”中得到这个

理想情况下,我希望能够有一个列表,其中包含2码头项目在C#中,改变等待时间没有帮助。

qcbq4gxm

qcbq4gxm1#

在ProcessStartInfo中,您必须设置

StandardOutputEncoding = Encoding.Unicode;
StandardErrorEncoding = Encoding.Unicode;

对于WSL的直接呼叫,另外使用:

FileName = @"wsl.exe";
Arguments = @"-l -v";

相关问题