在升级过程中从 inno setup 软关闭应用程序的最佳方法

Best way to softly close application from inno setup during upgrade

多年来我一直使用此代码在从 INNO SETUP 升级期间关闭我的 运行 应用程序,但现在它不能很好地与某些版本的应用程序一起使用。 任何想法,关闭 运行 进程(delphi 应用程序)的更好方法是什么? 我需要让它在静默设置期间正常工作,所以没有对话框...

  h := FindWindowByWindowName('Myapp');
  v1 := [=10=]16; //WM_ENDSESSION
  v2 := 000000;// ENDSESSION_LOGOFF
  if h<>0 then PostMessage (h,v1,1,v2);

这似乎效果更好:

[Code]
const
  WM_CLOSE = [=10=]10;

...
  if h <> 0 then
    PostMessage(h, WM_CLOSE, 0, 0);
...

在 Windows Vista 及更高版本中,您应该使用 Windows 重启管理器 (https://msdn.microsoft.com/en-us/library/windows/desktop/aa373524.aspx)

InnoSetup直接支持它,检查[CloseApplications]指令。当运行处于安静模式时,它会在不询问用户的情况下关闭应用程序。