【发布时间】:2018-06-17 12:25:32
【问题描述】:
我有一个启动另一个 dotnet core WebAPI 的 dotnet core 2.0 控制台应用程序。 问题是,当控制台应用程序关闭时,我如何干净地杀死 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);
}
}
【问题讨论】:
-
“它无法杀死所有进程”是什么意思?您的服务是否再次产生其他进程?那么这将无济于事,因为 kill 不是递归的。我建议您考虑一个很好地终止所有进程的解决方案。杀死应该始终是最后的选择,因为它可能会导致数据丢失。
-
@mjwills,您说:“启动 cmd.exe 来运行 dotnet 似乎很奇怪。您应该直接启动 dotnet。”那么,直接运行
dotnet是什么意思? -
@mjwills - 效果很好!不知道为什么我之前没有想到这一点 :-) 我认为最好发布带有完整解决方案的代码示例。你要我发还是你愿意?
-
@mjwills,已发给您的学分。感谢您的帮助。
标签: c# asp.net-core-2.0