【发布时间】:2022-01-22 09:08:51
【问题描述】:
有没有办法用 C# 脚本杀死进程并让进程的退出代码等于 0?我尝试使用 Process.Kill() 但返回退出代码-1。我正在使用 Process.GetProcessesByName() 函数访问获取 Excel 进程。看起来有一个 Win32 API 函数 TerminateProcess 将退出代码作为参数,但我在 Process 类中找不到任何等效项。
编辑: 有趣的发现 - 当我在 Windows 任务管理器中找到 Excel 进程然后单击“结束任务”时,Excel 进程以代码 0 退出。因此,任务管理器发送给进程的信号似乎与 System.Diagnostics 不同。杀()。现在我只需要弄清楚任务管理器正在发送什么信号并发送它。
【问题讨论】:
-
“杀死”一个进程意味着你不允许它返回一个退出代码。您正在强制终止程序。
-
这可以帮助stackoverflow.com/a/3411988/2878550(或通过WinAPI stackoverflow.com/a/9248477/2878550)吗?
-
我尝试使用 CloseMainWindow() 函数,但运行后 Excel 进程仍然挂起。它与只是在 UI 中关闭窗口具有相同的效果。
-
@gunr2171:在 OS 结构中仍然有一个退出代码变量表示已终止的进程,其他程序可以读取该变量。你是正确的,终止阻止它通过从受害者进程返回来填充它,但你暗示的结论是退出代码不再有意义,但这不是真的。正如 OP 所写,
TerminateProcess确实接受一个整数参数,该参数成为受害者进程退出代码。