.net 如何在c#中给进程给予cnt + c?

djmepvbi  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(122)

我试图创建一个backgroundworker,它创建一个进程,使一些ovf命令。在此期间,我尝试通过发送cnt +c来中止操作。这个网站上也有类似的问题,但没有一个能解决这个问题。

private void DeployOVF()
{
    p = new Process();
    ProcessStartInfo pi = new ProcessStartInfo("ovftool.exe", "--machineOutput "+ FileName + " vi://uname:pwd@Ip Address");
    pi.UseShellExecute = false;
    pi.RedirectStandardOutput = true;
    pi.RedirectStandardInput = true;
    pi.RedirectStandardError = true;
    pi.CreateNoWindow = true;
    p.StartInfo = pi;
    p.Start();
    StreamReader myStreamReader = p.StandardOutput;
    string myString;
    bool progressStarted = false;
    while ((myString = myStreamReader.ReadLine()) != null)
    {
        //Logic to display the progress
    }
    p.WaitForExit();
    p.Close();
}

这里是我发送我的c +c来中止进程的地方,

private void button1_Click(object sender, EventArgs e)
{
    p.StandardInput.Write("\x3");
    p.StandardInput.Close();
}
b5lpy0ml

b5lpy0ml1#

如果进程正在响应(即,它的前台线程正在响应信号),那么你应该使用:用途:

p.CloseMainWindow();

如果没有,你应该可以用Kill中止这个过程(不干净):

p.Kill();

//Then wait for the process to end
p.WaitForExit();
p.Close();
5rgfhyps

5rgfhyps2#

我不知道这会有多大帮助,因为我不熟悉ofv,但也许可以试试MedallionShell。它具有多平台实现,支持将Ctrl + C信号发送到应用程序。

var command = Command.Run("dotnet", "run", "--project", "C:\MyRepo\MyProj\MyProj.csproj");

// Business logic here...

await command.TrySignalAsync(CommandSignal.ControlC);

我试图使用一个ASP.NET Core应用程序向另一个ASP.NET Core应用程序发送Ctrl + C信号,MedallionShell工作得很好!

相关问题