Разъяснение об использовании RunOnceId в разделе [UninstallRun] скрипта установки Inno

#inno-setup #uninstallation

#inno-setup #удаление

Вопрос:

Вот мой [UninstallRun] раздел:

 [UninstallRun]
Filename: {dotnet40}regasm.exe; Parameters: /u MSAToolsLibrary_x86.dll; WorkingDir: {app}; Flags: runhidden;
Filename: {dotnet4064}regasm.exe; Parameters: /u MSAToolsLibrary_x64.dll; WorkingDir: {app}; Flags: runhidden; Check: IsWin64;
Filename: {dotnet40}regasm.exe; Parameters: /u MSAToolsGMailLibrary_86.dll; WorkingDir: {app}MSAToolsGMailLibrary; Flags: runhidden
Filename: {dotnet4064}regasm.exe; Parameters: /u MSAToolsGMailLibrary_64.dll; WorkingDir: {app}MSAToolsGMailLibrary; Flags: runhidden; Check: IsWin64;
  

При компиляции с помощью Inno Setup 6.1.1 я получаю это предупреждение:

Предупреждение: есть [UninstallRun] записи раздела без RunOnceId параметра. Назначая строку для RunOnceId , вы можете гарантировать, что конкретная [UninstallRun] запись будет выполнена только один раз во время удаления. [UninstallRun] Для получения дополнительной информации см. Раздел «» в файле справки.

Я просмотрел справку о RunOnceId том, где в ней указано:

Допустимо только в [UninstallRun] разделе. Если одно и то же приложение установлено более одного раза, записи «run» будут дублироваться в файле журнала удаления. Назначая строку для RunOnceId , вы можете гарантировать, что конкретная [UninstallRun] запись будет выполнена только один раз во время удаления. Например, если две или более записей «выполнить» в журнале удаления имеют RunOnceId значение «DelService», будет выполнена только последняя запись с RunOnceId значением «DelService»; остальные будут проигнорированы. Обратите внимание, что RunOnceId сравнения чувствительны к регистру. Если вы не назначите строку RunOnceId , компилятор предупредит вас об этом, что можно отключить с помощью MissingRunOnceIdsWarning .

Я вижу, что могу отключить предупреждение. Но я хотел знать, действительно ли мне нужно использовать этот параметр в моей настройке, потому что я никогда не делал этого до сих пор.

Ответ №1:

Вы должны использовать параметр, как следует из предупреждения.

Если вы этого не сделаете, при каждом обновлении (если ваш установщик не удалит предыдущую версию) новое выполнение ваших [UninstallRun] команд будет помещено в очередь. Таким образом, если вы устанавливаете, а затем обновляете 9 раз, все ваши команды удаления будут выполняться 10 раз при удалении. Конечно, в вашем случае это означает, что каждая ваша regasm /u команда завершится ошибкой 9 раз. Не имеет большого значения, но если пользователь проверит журнал удаления (на случай, если у него возникнут проблемы), он увидит множество сбоев, что может ввести их в заблуждение.

Обратите внимание, что вы не можете исправить это ретроспективно. Команды удаления, поставленные в очередь предыдущими установщиками, будут по-прежнему выполняться для каждой прошлой установки. Но опять же, если бы это было серьезной проблемой, вы, вероятно, уже заметили бы.

Комментарии:

1. Документация: jrsoftware.org/ishelp/index.php?topic=runsection