在卸载期间,系统会询问用户“您确定要卸载......”。
然后用户将单击“是”或“否”。
是否有可能在脚本上捕获这个?
因为我需要在卸载过程结束时执行一个应用程序。
如果我在“InitializeUninstall()”期间执行该应用程序,那是不正确的,因为用户可以稍后取消卸载(上述对话框显示在此功能之后)。
与“DeInitializeUninstall()”相同,即使用户取消卸载,此功能仍会执行。
基本上,我需要在用户真正卸载(同意卸载)时执行应用程序。因为我需要捕获此应用程序的ExitCode以设置UninstallNeedRestart()函数。
感谢。
答案 0 :(得分:1)
您可以在[代码]部分添加全局变量
[Code]
var
ApplicationWasUninstalled: Boolean;
之后,在InitializeUninstallProgressForm过程中,您可以将全局变量设置为1(注意:仅当用户在提示他们是否要卸载应用程序时单击“是”时才会执行此函数
procedure InitializeUninstallProgressForm();
begin
ApplicationWasUninstalled := true;
end;
继续,您将检查DeinitializeUninstall函数中ApplicationWasUninstalled的值
procedure DeinitializeUninstall();
begin
if ApplicationWasUninstalled Then Begin
//your code here
end;
end;
答案 1 :(得分:1)
实现此目的的另一种方法是使用[Run]和/或[UninstallRun]部分在安装后/卸载前运行可执行文件。
您可以运行可执行文件来执行您需要的任何清理工作。
编译一个帮助程序exe以执行您想要的操作,或者在提供命令行参数时将该函数添加到主可执行文件中。
[Run]
Filename: "{app}\CleanUp.exe"; WorkingDir: "{app}"
[UninstallRun]
Filename: "{app}\CleanUp.exe"; Parameters: "/uninstall"; WorkingDir: "{app}"; RunOnceId: "CleanUpApp"
inno设置文档中的更多信息:http://www.jrsoftware.org/ishelp/index.php?topic=runsection
您还需要将helper exe添加到安装中:
[Files]
...
Source: "C:\myprog\CleanUp.exe"; DestDir: "{app}"; Flags: ignoreversion
答案 2 :(得分:1)
使用usPostUninstall
参数调用CurUninstallStepChanged()
事件函数时,可以执行此操作。
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
// Do your uninstall time code here
Exec(ExpandConstant('{app}\CleanUp.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;