如何解决在后台用'&'运行linux shell命令总是失败
我正在尝试从点网核心运行android模拟器。我正在用以下代码来做到这一点:
var psi = new ProcessStartInfo
{
FileName = "/Users/hexdump/Library/Android/sdk/platform-tools/adb",Arguments = "-avd emulator-5444 &",UseShellExecute = false,RedirectStandardOutput = true,RedirectStandardError = true,};
var proc = new Process
{
StartInfo = psi
};
success = proc.Start();
proc.WaitForExit();
非常标准的代码在这里。这适用于我运行的所有命令,但是需要“删除”运行的命令不起作用。显然,如果从控制台执行,它可以正常运行。
作为旁注,我删除了“ WaitForExit”调用,并且以某种方式能够执行我想要的操作。但是,当我关闭dotnet时,我启动的进程也被杀死(很麻烦)。这不是我想要的。
.net网络核心是否能够在后台运行脚本/可执行文件?
解决方法
&
是一个shell构造。它表示您要在后台运行该应用程序。
但是您没有运行外壳程序(例如bash
)。您正在直接运行程序:/Users/hexdump/Library/Android/sdk/platform-tools/adb
。
要解决此问题,请从参数列表中删除参数&
。这使.NET Core可以直接运行可执行文件。您还需要删除proc.WaitForExit()
调用,因为您的程序不想等待仿真器退出。
具有误导性的UseShellExecute
与在Linux / macOS / Unix shell中运行无关,它是 Windows shell。它的行为更像是调用open
(macOS)或xdg-open
(Linux)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。