这是一个简单的问题 - 无论如何,非控制台(即CWinApp)应用程序可以接收并处理 CTRL + BREAK ,它会出现SetConsoleCtrlHandler不做工作和信号处理程序的安装?
我很遗憾正在使用基于CDialog的传统应用程序,该应用程序在Microsoft HPC的控制下运行,HPC使用 CTRL + BREAK 取消程序(假设我猜在他们的正确思想中没有人会在后台运行非控制台应用程序)
干杯。
答案 0 :(得分:1)
使用ATTACH_PARENT_PROCESS
调用AttachConsole应该可以解决问题。这会将您的进程附加到HPC控制台,以便它可以接收控制中断信号。您应该在致电SetConsoleCtrlHandler之前执行此操作。
如果不起作用,请尝试使用AllocConsole。如果HPC没有自己的控制台,可能假设子进程将创建一个新的控制台组(这会自动发生在控制台模式应用程序中),在这种情况下,它将发送一个控制中断信号到子过程PID。如果是这样,控制台组是自动创建还是显式创建无关紧要。
您可能希望首先确保HPC确实通过检查GenerateConsoleCtrlEvent是否按预期用于控制台模式应用程序发送控制中断信号(可能通过SetConsoleCtrlHandler)。如果它正在呼叫TerminateProcess,那么你无能为力。