Inno Setup卸载程序:尝试在创建之前访问WizardForm

时间:2017-04-28 06:50:41

标签: inno-setup

我在WizardForm时出现问题,当我尝试卸载程序时出现此错误:

  

运行时错误:

     

内部错误:在创建WizardForm之前尝试访问它。

enter image description here

我需要使用循环创建软中止卸载过程(例如,当应用程序运行且用户运行卸载时,程序必须检查进程,如果应用程序正在运行,请通知用户,如果用户按下取消按钮,程序将中止卸载),我曾尝试ExitProcess(0);,但并不温柔。

代码部分:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  case CurUninstallStep of
    usUninstall:
    begin
      if MsgBox('Close the {#AppName}, before uninstallation.', mbConfirmation, MB_YESNO) = IDYES then
      begin
        { user clicked Yes }
      end
        else
      begin
        MsgBox('Error',mbError,MB_OK);
        CancelWithoutPrompt := true;
        { ExitProcess(0); }
        WizardForm.close;
      end
    end; 
  end;
end;

1 个答案:

答案 0 :(得分:2)

您实施问题的方法是错误的,请参阅最后一页。

无论如何,要解决您的直接问题WizardForm是一个安装程序表单。它在卸载程序中不存在。在卸载程序中,您有UninstallProgressForm。请参阅documentation

但你不想打电话给UninstallProgressForm.Close。由于下面给出的原因,这是错误的。

Inno Setup有一个内置机制,可以在应用程序运行时阻止(un)安装程序继续运行。 AppMutex directive

即使您想构建自己的解决方案,也可以使用InitializeUninstall event function,通过返回False,您可以轻松,干净地退出卸载程序。当然,您可以在退出之前显示您喜欢的任何消息。只需使用MsgBox function

my answerUninstall fails because program is running. How do I make Inno Setup check for running process prior to attempting delete?

涵盖了所有这些内容