我在一个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应用程序运行命令的方法,显然我用一种更优雅的方式来做这件事,但我正在努力学习和测试如何做到这一点。
谢谢!
1条答案
按热度按时间wmtdaxz31#
“此平台不支持系统.诊断.进程”
这就是你的答案。你不能做你正在尝试做的事情。你不能在Blazor WASM中使用系统。诊断。进程。
您不能从Web浏览器内部启动系统进程。如果可以,这将是一个主要的安全问题。
这段代码可以在使用Blazor Server时运行,因为代码将在服务器(可以使用System.Diagnostics.Process)上运行,而不是在浏览器中运行。