我在WizardForm
时出现问题,当我尝试卸载程序时出现此错误:
运行时错误:
内部错误:在创建WizardForm之前尝试访问它。
我需要使用循环创建软中止卸载过程(例如,当应用程序运行且用户运行卸载时,程序必须检查进程,如果应用程序正在运行,请通知用户,如果用户按下取消按钮,程序将中止卸载),我曾尝试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;
答案 0 :(得分:2)
您实施问题的方法是错误的,请参阅最后一页。
无论如何,要解决您的直接问题:WizardForm
是一个安装程序表单。它在卸载程序中不存在。在卸载程序中,您有UninstallProgressForm
。请参阅documentation。
但你不想打电话给UninstallProgressForm.Close
。由于下面给出的原因,这是错误的。
Inno Setup有一个内置机制,可以在应用程序运行时阻止(un)安装程序继续运行。 AppMutex
directive。
即使您想构建自己的解决方案,也可以使用InitializeUninstall
event function,通过返回False
,您可以轻松,干净地退出卸载程序。当然,您可以在退出之前显示您喜欢的任何消息。只需使用MsgBox
function。
my answer至Uninstall fails because program is running. How do I make Inno Setup check for running process prior to attempting delete?
涵盖了所有这些内容