【问题标题】:Application stays open due to processes由于流程,应用程序保持打开状态
【发布时间】:2021-08-26 20:29:12
【问题描述】:

我对 C# 比较陌生,所以我不确定这是否可能......

我正在尝试使用应用程序表单通过Process 启动其他程序,例如记事本,然后在记事本仍在运行时关闭我的原始应用程序。

Process notePad = new Process();
notePad.StartInfo.FileName = "notepad.exe";
notePad.Start();
Application.Exit();

根据我的发现,我必须关闭/终止记事本进程才能关闭正在启动的应用程序。不过,我希望记事本保持打开状态。

有什么方法可以通过 C# 实现吗?

【问题讨论】:

  • 这是因为该进程是作为您应用程序的子进程启动的。如果不杀死子进程,您也无法杀死父进程。

标签: c#


【解决方案1】:

试试这个?

using(Process notePad = Process.Start("notepad.exe","")) { }
Application.Exit();

【讨论】:

  • 这会启动记事本,但我的应用程序似乎仍然忽略了 Application.Exit(); 。编辑:我做了更多测试并尝试了Environment.Exit(0);,它运行良好,谢谢:)(我现在想知道为什么它不接受Application.Exit();)
  • 您不需要调用Application.Exit(),离开“使用”范围后,该进程将超出范围并被清理。
【解决方案2】:

如果您希望记事本在关闭表单后仍然打开,请使用此代码

private void button1_Click(object sender, EventArgs e)
{
    Thread notepad_opener = new Thread(opener);
    notepad_opener.Start();
}
public void opener()
{
    Process.Start("notepad.exe");
    Application.Exit();
}

我试试这个,记事本仍然打开:D

【讨论】:

  • 干杯伙伴 :) 我希望不用按钮就能做到。但我发现我的问题是使用Application.Exit();,而不是Environment.Exit(0);
  • 你可以用任何方法:D
【解决方案3】:

您需要将UseShellExecute 属性设置为True;见this page

【讨论】:

    【解决方案4】:

    你可以保存你已经启动的进程ID:

    int id = notePad.Id;
    

    然后在你想要的时候杀死它:

    Process.GetProcessById(id).Kill();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 2013-11-14
      • 2015-04-07
      • 2012-07-03
      • 2023-04-11
      • 1970-01-01
      • 2018-05-13
      • 2021-07-17
      相关资源
      最近更新 更多