Требуется подтверждение перезаписи для одного конкретного файла в Inno Setup, установка других файлов в каталог безоговорочно

#installation #inno-setup

#установка #inno-setup

Вопрос:

У меня есть каталог ( Configurationfiles ), содержащий 84 файла. Один из этих файлов содержит данные, которые пользователь изменит ( UserData.json ) . Этот файл может быть или не быть там, но если он есть, я не хочу потерять эти данные и пытаюсь сохранить установку удобной для пользователя.

Я пытаюсь изменить существующий сценарий установки, который выполняет все следующие действия:

  1. Если в каталоге нет файлов, скопируйте их все
  2. Если есть файлы, перезапишите все файлы, кроме UserData.json
  3. если UserData.json отсутствует, скопируйте значение по умолчанию UserData.json
  4. Если UserData.json присутствует, предложите пользователю перезаписать UserData.json , если да, перезаписать, если нет, не

В настоящее время все файлы копируются, несмотря ни на что, и я никогда не получаю запрос на перезапись. Это то, что у меня есть до сих пор:

 #define ExcludeFiles "UserData.json"

Source: ....PROV4200701BIN*.*; Excludes: {#ExcludeFiles }; DestDir: {app}BIN; 
  Flags: ignoreversion recursesubdirs skipifsourcedoesntexist;

Source: ....PROV4200701BINConfigurationfilesUserData.json; 
  DestDir: {app}BINConfigurationfiles; 
  Flags: ignoreversion onlyifdoesntexist confirmoverwrite skipifsourcedoesntexist; 
  

Я думаю, что у меня что-то неправильно настроено с флагами. Но я не уверен. Кто-нибудь видит, где я ошибаюсь?

Ответ №1:

Вы никогда не сможете получить подтверждение, onlyifdoesntexist так как confirmoverwrite предотвращает когда-либо какое-либо действие.

Я не думаю, что вы правы с «все файлы копируются независимо от того». Когда я тестирую ваш скрипт, я получаю:

2020-09-26 16:51:21.625 — Запись файла —
2020-09-26 16:51:21.626 Имя файла Dest: C:UserspimpoAppDataLocalMy ProgramBINConfigurationfilesUserData.json
2020-09-26 16:51:21.626 Временная метка нашего файла: 2020-09-26 16:49:30.000
2020-09-26 16:51:21.626 Файл Dest существует.
2020-09-26 16:51:21.626 Пропуск из-за флага «onlyifdoesntexist».


Если вы удалите onlyifdoesntexist , ваш скрипт должен делать то, что вы хотите.

2020-09-26 16:57:41.066 — Запись файла —
2020-09-26 16:57:41.067 Dest filename: C:UserspimpoAppDataLocalMy ProgramBINConfigurationfilesUserData.json
2020-09-26 16:57:41.067 Временная метка нашего файла: 2020-09-26 16:49:30.000
2020-09-26 16:57:41.067 Файл Dest существует.
2020-09-26 16:57:41.067 Временная метка существующего файла: 2020-09-26 16:49:30.000
2020-09-26 16:57:41.067 Окно сообщения (Да/Нет):
C:UserspimpoAppDataLocalMy ProgramBINConfigurationfilesUserData.json

Файл уже существует.

Вы хотите, чтобы программа установки перезаписала его?
2020-09-26 16:57:43.055 Пользователь выбрал Да.
2020-09-26 16:57:43.055 Установка файла.
2020-09-26 16:57:43.062 Успешно установил файл.


Возможно, вы захотите удалить ignoreversion too, поскольку это не влияет на .json файлы. Это может сбить с толку других. Это skipifsourcedoesntexist также сомнительно.

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

1. Спасибо, я удалил флаг (onlyifdoesntexsist), и он работает правильно.