Вопрос:

Как настроить Inno Setup для удаления всего?

inno-setup

38965 просмотра

9 ответа

3834 Репутация автора

Я новичок в Inno Setup. Застрял в одной проблеме ~ как настроить удаляемую часть для удаления всех файлов, папок, подпапок и даже новых файлов / папок и т. Д., Созданных приложением (другими словами, 100% удаление приложения и связанных файлов).

Я охотился здесь, а также на их форуме, и пришел пустым. Может ли кто-нибудь указать мне на документ, часто задаваемые вопросы и т. Д. Относительно того, как это сделать?

ОБНОВИТЬ

Спасибо за все отзывы до сих пор (очень круто). Таким образом, похоже, что я могу удалить все, используя директиву {app} *. * В разделе удаления. Также похоже, что все советуют против этого. Таким образом, теперь возникает вопрос (я задаюсь вопросом, должен ли это быть совершенно новый вопрос) есть ли способ во время удаления, который мы можем спросить у пользователя: «Вы хотите удалить все файлы проекта, связанные с этим приложением?» и если они ответят «ДА», чтобы запустить файл удаления {app} *. *?

Спасибо -

Автор: OneNerd Источник Размещён: 13.03.2009 04:29

Ответы (9)


0 плюса

79255 Репутация автора

Разве это не по умолчанию, если вы не указали «uninsneveruninstall» для записи?

Извините, я не понял, что вы говорили о недавно созданных файлах данных.

Автор: Martin Beckett Размещён: 13.03.2009 04:36

15 плюса

18899 Репутация автора

Я думаю, что рекомендуемый подход - указать, что удалить в разделе удаления. Причиной является то, что, если по какой-либо причине пользователь решил поместить свои собственные файлы в каталог установки, которые они не хотели удалить, или сохранить данные, которые они могут захотеть сохранить (может быть, они деинсталлируют установку более новой версии? )

При этом я не знаю, что такое скрипт, но если вы используете ISTool (очень рекомендую), просто попали в раздел «Удалить удаление» и добавили вещи, которые вы хотите удалить. Он должен представить все возможные варианты в приятном графическом интерфейсе и создать сценарий для вас.

Изменить: пример из документации Inno Setup:

[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"

Но они сильно не делают что-то вроде

[UninstallDelete]
Type: files; Name: "{app}\*.*"

ПРИМЕЧАНИЕ. Не используйте собеседник для удаления всех файлов в каталоге {app}. Я настоятельно рекомендую не делать этого по двум причинам. Во-первых, пользователи обычно не понимают, что файлы данных, которые они помещают в каталог приложения, удаляются без предупреждения (они могут удалить его только потому, что они хотят переместить его на другой диск, например). Лучше оставить его конечным пользователям, чтобы вручную удалить их, если они захотят. Кроме того, если пользователь случайно установил программу в неправильном каталоге по ошибке (например, C: \ WINDOWS), а затем отправился ее удалять, могут быть катастрофические последствия. Так что снова, НЕ ДЕЛАЙТЕ ЭТО!

Автор: Davy8 Размещён: 13.03.2009 04:45

3 плюса

106205 Репутация автора

Вы не можете использовать InnoSetup для удаления всего, что он не установил, и вы не должны этого делать. Я был бы очень недоволен, если бы я установил приложение, ввел много данных, а затем решил использовать что-то другое, вместо того, чтобы читать эти данные из вашего приложения. Если ваша деинсталляция убила всю работу, которую я уже сделал, у меня может возникнуть соблазн прийти к вам в поисках. И, вероятно, не купите вам чашку кофе.

Или рассмотрим случай, когда я устанавливаю ваше приложение в процессе оценки нескольких. Я пробую приложения и продолжаю возвращаться к вам, потому что мне это нравится немного лучше, и каждый раз я вводил больше данных. Затем я решил не делать ничего какое-то время, поэтому я удаляю все тестовые приложения. Через неделю я решил, что мне нужно использовать ваше приложение сейчас, и я его переустановил. К сожалению! Вся работа, которую я тестировал, которую я сейчас хотел использовать, исчезла.

Вышесказанное состоит в том, что при удалении приложения он оставляет все, что вы создали в папках, например, файлы конфигурации, файлы данных и т. Д. Он не знает, что вы хотите с ними делать, поэтому он оставляет их в покое.

Автор: Ken White Размещён: 13.03.2009 04:51

11 плюса

29820 Репутация автора

Решение

Вероятно, вы должны были задать совершенно новый вопрос, но я также отвечу на ваш обновленный вопрос. Взгляните на раздел «Паскаль-сценарий: код удаления» в документации по установке Inno.

Чтобы привести пример условного удаления файлов данных в процессе удаления:

[Code]

procedure DeleteBitmaps(ADirName: string);
var
  FindRec: TFindRec;
begin
  if FindFirst(ADirName + '\*.*', FindRec) then begin
    try
      repeat
        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then begin
          if (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin
            DeleteBitmaps(ADirName + '\' + FindRec.Name);
            RemoveDir(ADirName + '\' + FindRec.Name);
          end;
        end else if Pos('.bmp', AnsiLowerCase(FindRec.Name)) > 0 then
          DeleteFile(ADirName + '\' + FindRec.Name);
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then begin
    if MsgBox('Do you want to delete all data files?', mbConfirmation,
        MB_YESNO) = IDYES 
    then begin
      DeleteBitmaps(ExpandConstant('{app}'));
    end;
  end;
end;

Но в зависимости от количества вещей, которые нужно очистить, вам может быть лучше создать специальную вспомогательную программу, которая является частью установки, и которая может быть выполнена во время удаления приложения (с использованием записи в [UninstallRun] раздел).

Автор: mghie Размещён: 16.03.2009 09:55

4 плюса

76 Репутация автора

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

В этом случае я предлагаю создать файл «патч-манифест», который хранит текущую запись о том, какие файлы должны находиться в каталоге {app}. Найдите ниже пример кода, который читается из файла в каталоге {app}, названном 'patch_manifest.txt'

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  i: Integer;
  arrayLen: Longint;
  item: String;
  itemsToDelete: Array of String;
begin
  case CurUninstallStep of
    usUninstall:
      begin
        LoadStringsFromFile(ExpandConstant('{app}') + '\patch_manifest.txt', itemsToDelete);
        arrayLen := GetArrayLength(itemsToDelete);
        for i := 0 to arrayLen-1 do
          begin
          item := ExpandConstant('{app}') + '\' + itemsToDelete[i];
          if FileExists(item) then
            DeleteFile(item);
          if DirExists(item) then
            RemoveDir(item);
          end;
      end;
  end;
end;

и образец файла patch_manifest.txt

data/something_here.dat
data/moredatahere.dat
data/
Launcher.exe
patch_manifest.txt

Примечание: порядок строк в patch_manifest важен. Сначала должны быть указаны все файлы в каталоге, за которыми следует каталог - каталоги, которые не являются пустыми, не могут быть удалены.

Ваше приложение должно быть отправлено с помощью patch_manifest, и patch_manifest должен обновляться с каждым патчем. Сделайте эту часть процесса сборки, чтобы вы не забыли ее обновить!

Очень важно, чтобы вы не удаляли по шаблону ( . ), Даже если вы запрашиваете пользователя. У Uninstaller есть повышенные привилегии, которые могут потенциально уничтожить компьютер пользователя. Возьмите случай пользователя, который случайно установил ваше приложение в C: \ Windows \ или C: \ Program Files.

Еще одна хорошая идея - проверить, что файл фактически является «вашим файлом», выполнив проверку MD5 перед удалением. В этом случае ваш patch_manifest.txt будет содержать не только относительный путь к файлу, но и контрольную сумму MD5.

Автор: reset Размещён: 19.03.2011 04:04

4 плюса

69 Репутация автора

Это должно сделать трюк:

[Dirs]
Name: "{app}"; Flags: uninsalwaysuninstall
Автор: Scoox Размещён: 18.09.2013 05:00

0 плюса

10554 Репутация автора

Я хотел удалить, gData.datкоторый был создан во время выполнения в установленной папке

и отлично работал для меня

[UninstallDelete]
Type: files; Name: "{app}\gData.dat"
Автор: Salim Размещён: 17.02.2015 04:38

-1 плюса

1 Репутация автора

Чтобы удалить все, что я использую:

[UninstallDelete]
Type:files; Name: "{app}"
Автор: Matzora Размещён: 12.03.2015 11:34

0 плюса

484 Репутация автора

Добавьте элемент удаления файла / папки в студии Inno Setup. Или напрямую используйте скрипт следующим образом.

[Сгенерированный образец кода]

[UninstallDelete]
Type: filesandordirs; Name: "{app}\unnecessary_files"
Автор: Naveen Kumar V Размещён: 14.11.2018 10:05
Вопросы из категории :
32x32