Запуск приложения в конце удаления в InnoSetup, обработка отмены пользователя - PullRequest
2 голосов
/ 29 марта 2010

Во время деинсталляции пользователю будет предложено «Вы уверены, что хотите удалить ...».

Затем пользователь нажимает «Да» или «Нет».

Можно ли поймать это на скрипте?

Потому что мне нужно выполнить приложение в конце процесса удаления.

Если я выполняю приложение во время «InitializeUninstall ()», это неверно, поскольку пользователь может отменить удаление позже (вышеприведенный диалог отображается ПОСЛЕ этой функции).

То же самое с «DeInitializeUninstall ()», эта функция по-прежнему выполняется, даже если пользователь отменяет удаление.

По сути, мне нужно выполнить приложение, когда пользователь действительно деинсталлирует (согласился удалить). Потому что мне нужно поймать ExitCode этого приложения, чтобы установить функцию UninstallNeedRestart ().

Спасибо.

Ответы [ 3 ]

1 голос
/ 05 июня 2013

Другим способом достижения этого является использование разделов [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

Вам также необходимо добавить вспомогательный exe-файл к установке:

[Files]
...
Source: "C:\myprog\CleanUp.exe"; DestDir: "{app}"; Flags: ignoreversion
1 голос
/ 05 июня 2013

Вы можете сделать это в функции события CurUninstallStepChanged(), когда она вызывается с параметром usPostUninstall.

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;
1 голос
/ 30 марта 2011

Что вы можете сделать, это добавить глобальную переменную в ваш раздел [Code]

 [Code]

var
  ApplicationWasUninstalled: Boolean;

После этого в процедуре InitializeUninstallProgressForm вы можете установить глобальную переменную равной 1 (Примечание: эта функция выполняется только в том случае, если пользователь нажимает Да, когда ему предлагается, если они хотят удалить ваше приложение

procedure InitializeUninstallProgressForm();
begin
  ApplicationWasUninstalled := true;
end;

Продолжая, вы проверите значение ApplicationWasUninstalled в функции DeinitializeUninstall

procedure DeinitializeUninstall();
begin
  if ApplicationWasUninstalled Then Begin
      //your code here
  end;
end;
...