我需要通过代码重启我的应用程序,我选择使用批处理文件。 当应用程序启动时,它会创建一个这样的批处理:
taskkill /f /im AudioService.exe
TIMEOUT 10
start "AudioService" "AudioService.exe"
然后我从代码中调用它(使用Poco Library):
Poco::Process::Args args;
Poco::Process::launch(RESTART_SCRIPT_NAME, args);
现在,它的工作原理是网络连接没有关闭,而且当应用程序重启时,Bind()函数失败。
相反,如果我从资源管理器“手动”运行批处理文件,则所有工作都按预期工作:应用程序及其网络连接被终止。
有人可以告诉我为什么会发生这种情况吗?
答案 0 :(得分:0)
如果应用程序在没有关闭其句柄的情况下关闭,则操作系统负责处理它。操作系统决定关闭句柄取决于操作系统,而不是您的应用程序,因此您可能需要等待一段时间才能清理它们。
您可能希望查找哪些信号处理程序,以便您的应用程序可以确保它始终清理干净