gpt4 book ai didi

c# - Process.Start() 在命令等待用户输入时挂起服务

转载 作者:行者123 更新时间:2023-11-30 15:29:35 26 4
gpt4 key购买 nike

我有一个应用程序,用户可以在其中输入一个服务稍后运行的 dos 命令。以下是用户可以输入的内容的示例:

enter image description here

这很好用,但由于服务运行命令,/Q 参数必须存在,因为没有人工交互。我试图弄清楚当 /Q 丢失时服务如何优雅地处理。就目前而言,该服务实际上挂起,必须停止(几次)然后重新启动。发生这种情况是因为没有 /Q 的命令最终会等待用户输入。

这是运行命令的(精简)代码:

using (Process process = new Process())
{
string processOutput = string.Empty;

try
{
process.StartInfo.FileName = "file name (cmd in this case)";
process.StartInfo.Arguments = "parameters (with the \Q)";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;

process.Start();

processOutput = process.StandardOutput.ReadToEnd();

process.WaitForExit();
}
catch (Exception ex)
{
Logger.LogException(ex);
}

catch block 不会被命中。该服务只是挂起,直到我手动停止并启动它。

是否可以处理这种情况以使服务不挂起?我什至不确定要尝试什么。

最佳答案

如果找不到,一种方法是添加 /Q:

process.StartInfo.Arguments = arguments.AddQuietSwitch();

扩展方法:

private static Dictionary<string, string> _quietSwitchMap =
new Dictionary<string, string> { { "rmdir", "/Q" }, { "xcopy", "/y" } };

public static string AddQuietSwitch(this string input)
{
var trimmedInput = input.Trim();
var cmd = trimmedInput.Substring(0, trimmedInput.IndexOf(" "));

string switch;
if (!_quietSwitchMap.TryGetValue(cmd, out switch)) { return input; }
if (trimmedInput.IndexOf(switch, 0,
StringComparison.InvariantCultureIgnoreCase) > 0 { return input; }

return input += string.Format(" {0}", _quietSwitchMap[cmd]);
}

关于c# - Process.Start() 在命令等待用户输入时挂起服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23473276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com