如何在Blazor中运行shell命令并获得输出?

vm0i2vca  于 2023-03-03  发布在  Shell
关注(0)|答案(1)|浏览(160)

我在一个Blazor WASM应用程序中运行这个程序。在我的共享项目中,我有以下类。

public static class ShellHelper
{
  public static string ToBash(this string cmd)
  {
    var escapedArgs = cmd.Replace("\"", "\\\"");

    var process = new Process()
    {
      StartInfo = new ProcessStartInfo
      {
        FileName = "/bin/bash",
        Arguments = $"-c \"{escapedArgs}\"",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true,
      }
    };
    process.Start();
    string result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    Console.WriteLine(result);
    return result;
    }
}

然后,我的客户端项目中有一个包含以下代码的页面。

@page "/bash"

<h3>Bash</h3>

<input @bind="command" />
<button class="btn btn-primary" @onclick="runCommand">Execute</button>
<p>Output:<br />
    The following command "@command" was run at @timestamp<br />
    @result</p>

@code {
    private string command { get; set; }
    private string timestamp { get; set; }
    private string result { get; set; }

    private void runCommand()
    {
        timestamp = DateTime.Now.ToString();

        try
        {
            result = command.ToBash();            
        }
        catch (Exception ex)
        {
            result = ex.ToString();
        }
    }
}

它给出了以下输出。
系统平台不支持异常:系统.诊断.进程在此平台上不受支持。在Nexus上的系统.诊断.进程.. ctor()。在F:\Projects\Blazor Projects\Nexus\Nexus\Shared\ShellHelper中的共享. shell 助手. ToBash(字符串cmd)。在Nexus上的cs:第16行。在F:\Projects\Blazor Projects\Nexus\Nexus\Client\Pages\Bash中的客户端.页面. Bash. runCommand()。剃刀:第22行
我只是想从我的Blazor应用程序运行命令的方法,显然我用一种更优雅的方式来做这件事,但我正在努力学习和测试如何做到这一点。
谢谢!

wmtdaxz3

wmtdaxz31#

“此平台不支持系统.诊断.进程”

这就是你的答案。你不能做你正在尝试做的事情。你不能在Blazor WASM中使用系统。诊断。进程。
您不能从Web浏览器内部启动系统进程。如果可以,这将是一个主要的安全问题。
这段代码可以在使用Blazor Server时运行,因为代码将在服务器(可以使用System.Diagnostics.Process)上运行,而不是在浏览器中运行。

相关问题