gpt4 book ai didi

c# - .Net Core 开放外部终端

转载 作者:行者123 更新时间:2023-11-30 23:10:21 26 4
gpt4 key购买 nike

我正在将批处理脚本迁移到 .Net 核心,我正在尝试从当前终端打开另一个终端并运行命令(我不需要 stderr 或 stout)。

使用批处理只需要这个命令:start cmd/K gulp。我正在尝试对 .Net 核心做同样的事情,但只找到了在当前终端内运行命令的方法。

private static string Run (){
var result = "";
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = $"/c \"gulp browserSync\"";
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

using (Process process = Process.Start(startInfo))
{
result = process.StandardError.ReadToEnd();
process.WaitForExit();
}
}
catch (Exception Ex)
{
Console.WriteLine(Ex.Message);
Console.ReadKey();
}
return result;
}

我正在尝试更改此属性以便在另一个终端中打开:

startInfo.RedirectStandardOutput = false;
startInfo.RedirectStandardError = false;
startInfo.UseShellExecute = true;

但破例:

UseShellExecute must always be set to false.

最佳答案

来自MSDN docs :

UseShellExecute must be false if the UserName property is not null or an empty string, or an InvalidOperationException will be thrown when the Process.Start(ProcessStartInfo) method is called.

startInfo.UserName = null;

编辑:我不确定为什么你必须传递参数,但如果你想要的只是一个新的 CMD 窗口,试试这个:

try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
WorkingDirectory = @"C:/users/replace/where_gulp_is_located",
Arguments = @"/c gulp", // add /K if its required, I don't know if its for gulp for to open a new cmd window
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true
};

Process proc = new Process();
proc.StartInfo = startInfo;
proc.Start();

if (showOut)
{ ///code }

}catch(Exception ex)
{
Console.WriteLine(ex);
}

在这种情况下,您不需要startInfo.UserName,因为您正在指定一个工作目录。

关于c# - .Net Core 开放外部终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382418/

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