命令行窗口是否正常重启退出正在运行的应用程序

时间:2015-03-27 09:54:18

标签: windows python-2.7 pyinstaller

平台:Windows 2008服务器

遇到使用pyinstaller生成的单文件exe不会清除其关联的临时文件夹的问题。阅读有关此http://pythonhosted.org/PyInstaller/的信息,并发现如果exe没有正常关闭,它将不会删除其关联的临时文件夹。在此之后,我与设置exe的IT人员进行了交谈,并被告知该应用程序在系统启动时启动,每晚都会重启系统。

我试图找出Windows上的系统重新启动是否会正常退出正在运行的应用程序,但无法找到与此相关的任何内容。

有没有人知道Windows是否会在计划的系统重启时正常退出正在运行的应用程序?

提前致谢

1 个答案:

答案 0 :(得分:2)

是的,确实如此,但implementation slightly differs between XP\Vista。您还可以更改关机计时器和自动关闭行为:How to Specify WaitToKillAppTimeout to Speed Up Shut Down Time in Windows

在Windows XP中:

  

在Windows XP中,每个正在运行的应用程序都会发送WM_QUERYENDSESSION   关机时的消息。应用程序可以返回TRUE以指示   它们可以被关闭,或者表示它们不应该是FALSE   关闭(例如,因为这样做会导致用户丢失数据或   销毁被烧毁的CD)。如果应用程序在大多数情况下返回FALSE   案例,关闭将被取消(和取消的应用程序   使用wParam == FALSE发送关闭WM_ENDSESSION。

     

应用程序还可以按顺序延迟响应WM_QUERYENDSESSION   显示用户询问用户想要做什么的UI。例如,何时   记事本有未保存的数据并显示"您要保存您的   数据&#34?;在关机期间对话,这就是它正在做的事情。默认情况下,   应用程序可以延迟响应WM_QUERYENDSESSION最多5个   秒。 5秒后,Windows XP将显示一个对话框   表示应用程序没有响应并允许用户   终止它。直到用户响应此对话框,应用程序   可以阻止WM_QUERYENDSESSION(并因此关闭)   下去。

在Windows Vista中

  

用户强行关闭的能力
  在Windows XP中,UI用于   阻止应用程序允许用户取消关闭或   终止阻止应用程序。如果后续申请也   块关闭,系统为每个阻塞显示相同的UI   应用。这对许多用户来说是令人沮丧的,他们在关闭时会这样做   下来,"只是想"他们的电脑要关掉。 Windows Vista会   通过允许用户终止阻止应用程序来解决这个问题   关机"强有力。"在强制关机中,Windows将发送   带有ENDSESSION_CRITICAL标志的WM_QUERYENDSESSION应用程序。如果   一个应用程序响应FALSE,Windows将继续关闭   取消它,并将发送应用程序WM_ENDSESSION。如果   应用程序超时响应WM_QUERYENDSESSION或   WM_ENDSESSION,Windows将终止它。

     

将不再允许取消静音
  在Windows XP中,   允许应用程序否决WM_QUERYENDSESSION而不显示   任何UI指示他们需要取消关闭的原因。这些"沉默   关机失败"对用户来说非常令人沮丧,他们经常会这样做   一两分钟才意识到关机失败,因为没有用户界面   显示。 Windows Vista将通过显示消除这种可能性   UI即使应用程序否决了WM_QUERYENDSESSION。

     

某些类型的应用程序将不再允许阻止   关掉。在关机时,Windows Vista将检查每个是否正在运行   应用程序没有响应(应用程序定义为不响应   响应,如果它没有响应其中的任何窗口消息   最后5秒),如果是,则自动终止它。

     

Windows Vista也不允许使用控制台应用程序或应用程序   没有可见的顶级窗口来阻止关机。在大多数情况下   在这种情况下,此类应用程序对关机时的用户不太重要   具有可见顶级窗口的应用程序。如果申请   没有可见的顶级窗口阻止通过否决关闭   WM_QUERYENDSESSION,或响应时间超过5秒   WM_QUERYENDSESSION或WM_ENDSESSION,Windows将自动执行   终止它。

     

但是,如果没有可见顶级窗口的应用程序使用   新API主动指示它需要阻止关闭,   Windows Vista不会自动终止它,而是会自动终止它   将其视为具有可见顶级的应用程序   窗口。