终止 Windows 进程并 Return 退出代码 0
Kill Windows Process and Return Exit Code 0
有没有办法使用 C# 脚本终止进程并使进程的退出代码等于 0?我尝试使用 Process.Kill() 但 returns 退出代码 -1。我正在使用 Process.GetProcessesByName() 函数访问获取 Excel 进程。看起来有一个 Win32 API 函数 TerminateProcess 将退出代码作为参数,但我在 Process class.
中找不到任何等效项
编辑:
有趣的发现 - 当我在 Windows 任务管理器中找到 Excel 进程,然后单击“结束任务”时,Excel 进程以代码 0 退出。因此,看起来任务的信号管理器发送到进程不同于 System.Diagnostics.Kill()。现在我只需要弄清楚任务管理器正在发送什么信号并发送它。
我解决了我的问题,尽管它有点脏。如果有人知道不用 DllImport 就可以做到这一点的方法,那么分享它可能会有用。这是我所做的:
class MyClass
{
[DllImport("Kernel32.dll", CharSet=CharSet.Auto)]
public static extern bool TerminateProcess(IntPtr proc, uint uExit);
public void MyFunction()
{
foreach (var process in Process.GetProcesssesByName("Excel")
{
TerminateProcess(my_process.Handle, 0);
}
}
}
有没有办法使用 C# 脚本终止进程并使进程的退出代码等于 0?我尝试使用 Process.Kill() 但 returns 退出代码 -1。我正在使用 Process.GetProcessesByName() 函数访问获取 Excel 进程。看起来有一个 Win32 API 函数 TerminateProcess 将退出代码作为参数,但我在 Process class.
中找不到任何等效项编辑: 有趣的发现 - 当我在 Windows 任务管理器中找到 Excel 进程,然后单击“结束任务”时,Excel 进程以代码 0 退出。因此,看起来任务的信号管理器发送到进程不同于 System.Diagnostics.Kill()。现在我只需要弄清楚任务管理器正在发送什么信号并发送它。
我解决了我的问题,尽管它有点脏。如果有人知道不用 DllImport 就可以做到这一点的方法,那么分享它可能会有用。这是我所做的:
class MyClass
{
[DllImport("Kernel32.dll", CharSet=CharSet.Auto)]
public static extern bool TerminateProcess(IntPtr proc, uint uExit);
public void MyFunction()
{
foreach (var process in Process.GetProcesssesByName("Excel")
{
TerminateProcess(my_process.Handle, 0);
}
}
}