程序升级完毕后需要自己退出,并调用新的安装包,一般情况下,MainForm.Close就可以了.
但是有时候,用户可能打开了某些窗口如设置,提示之类的模式对话.比如打开设置窗口后
SysSetForm.ShowModal;
RegisterHotKey(handle,hotkeyid,myinifile.1,40);
因为Close后还要执行RegisterHotKey(handle,hotkeyid,myinifile.1,40);
所以会出错.
用Application.Terminate的话Close中的内容又不执行,有没有好的办法.在Close中加Application.Terminate已证明不好使.求解决方法.

解决方案 »

  1.   

    这个问题好解决. 把RegisterHotKey 写在   Application.Run 后面就可以解决问题.
    Close 或者 Application.Terminate 都会执行. 
    欢迎加入:群 2518073开发者[DELPHI] 打广告的免入. 发一次就删除.
      

  2.   

    Close也是调用application.Terminateprocedure   test;  
      begin  
          MessageBox(0,'END','TEST',0);  
      end;     Application.Terminate;  
      AddExitProc(test);    AddExitProc(test);  
      Halt(0); 
      

  3.   

    难道不能if SysSetForm.ShowModal = mrok then
      RegisterHotKey(handle,hotkeyid,myinifile.1,40);
      

  4.   

    谢谢各位的帮助,上面的错误我只是举个例子啊.并不是针对这个错误的,
    这个地方有问题,我放到SysSetForm中去处理就可以了.关键我是怕还有别的地方,会引起问题.比如有的地方,我FormUpdate:=TFormUpdate.Create(Application)两次后,再MainForm.Close也会出问题.而正常我用手一个窗体,一个窗体的关,再结束程序是不会出任何问题的.我想知道怎么让程序可以和人一样正常的结束程序.那样就不会造成错误.某种程序上模式对话框这种东西对人的操作是有限制的,人来操作,我可以控制人关闭程序只有一个入口,只在一种状态下,但是对于程序中在任何地方都可以出来的MainForm.Close却无法按正常的流程处理.
      

  5.   

    你可以试试,在MainForm的OnDestroy事件中把你认为可能正在显示的窗体给释放掉。
    例如procedure TfrmWebClient.FormDestroy(Sender: TObject);
    begin
      if Assigned(FormUpdate) then
        FreeAndNil(FormUpdate);
    //其他窗口也类似这种
    //包括你全局的数组或是其他的内存都可以在这个时候给释放掉
    end;