Lir*_*man 6 c# asp.net-core-2.0
我有一个 dotnet core 2.0 控制台应用程序,可以启动另一个 dotnet core WebAPI。问题是,当控制台应用程序关闭时,如何干净地终止 WebAPI 进程?因为到目前为止,我无法启动该进程两次,因为它给出了地址正在使用的错误,我仍然可以在任务管理器中看到该进程。
这是我尝试这样做的方式,但似乎缺少完全杀死所有进程的东西:
class Program
{
static Process cmd;
static async Task Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
var startInfo = new ProcessStartInfo("cmd.exe")
{
UseShellExecute = false,
RedirectStandardInput = true,
CreateNoWindow = true,
};
cmd = new Process { StartInfo = startInfo };
cmd.Start();
using (cmd)
{
cmd.StandardInput.WriteLine($"cd C:/Project/publish");
cmd.StandardInput.WriteLine($"dotnet WebAPI.dll");
cmd.WaitForExit();
}
}
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
Process.GetProcessById(cmd.Id).Kill();
Environment.Exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
根据 @mjwills 的建议,我已更新流程如下:
class Program
{
static Process webAPI;
static async Task Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
webAPI = new Process
{
StartInfo = new ProcessStartInfo("dotnet")
{
UseShellExecute = false,
WorkingDirectory = "C:/Project/publish",
Arguments = "WebAPI.dll",
CreateNoWindow = true
}
};
using (webAPI)
{
webAPI.Start();
webAPI.WaitForExit();
}
}
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
webAPI.Close();
}
}
Run Code Online (Sandbox Code Playgroud)