Могу ли я контролировать, что нужно удалить при удалении одного приложения в inno setup?

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

Мой случай: после того, как я установил свое приложение, каталог "{pf} \ myapp \" включает несколько dll, два исполняемых файла, и там были созданы два значка на рабочем столе и программы удаления для каждого исполняемого файла. Я ожидаю, что пользователь сможет удалить каждый исполняемый файл, а не все файлы; и если это единственный оставшийся исполняемый файл, деинсталлятор удалит все файлы.

Заранее спасибо.


person Webber    schedule 20.02.2013    source источник
comment
Пожалуйста, уточните вопрос, который вы задаете   -  person Cody Guldner    schedule 20.02.2013
comment
Извините за плохой английский, я подробно изложил вопрос;   -  person Webber    schedule 20.02.2013
comment
Вы упоминаете деинсталлятор для каждого исполняемого файла. Можете ли вы подтвердить, что это ДВА отдельных пакета устанавливаются в одно и то же место? Если это так, вам просто нужен флаг sharedfile на общих файлах (в обеих настройках), в результате чего Inno удалит их только после того, как они будут завершены.   -  person Deanna    schedule 20.02.2013
comment
Большое спасибо за помощь. Фактически, два исполняемых файла устанавливаются в одном пакете. И я хочу удалить только один из исполняемых файлов и соответствующий значок на рабочем столе, когда деинсталлятор в той же группе выбран, и удалить все файлы, если это последний исполняемый файл.   -  person Webber    schedule 20.02.2013
comment
Я все еще в замешательстве. Inno не имеет понятия об удалении компонентов. Да, он может пропускать некоторые файлы во время удаления, но тогда они остаются навсегда. Если вам нужно, чтобы их можно было удалить по отдельности, это должны быть два отдельных установочных пакета. (Их можно обернуть в третью настройку, чтобы они выглядели как один пакет)   -  person Deanna    schedule 20.02.2013


Ответы (1)


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

При этом вы можете иметь любое количество общих файлов, которые могут быть библиотеками DLL, исполняемыми файлами и т. Д., Которые совместно используются между отдельными приложениями.

В Windows есть четко определенные процедуры для отслеживания общих файлов с подсчетом ссылок. Счетчик ссылок увеличивается установщиком и уменьшается деинсталлятором. Файлы удаляются из системы только в том случае, если счетчик ссылок достигает 0 во время удаления.

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

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "MyLib.dll"; DestDir: "{sys}"; Flags: sharedfile
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

Из документации (выделено мной):

общий файл

Указывает, что файл используется несколькими приложениями, и должен быть удален во время удаления только в том случае, если его не используют другие приложения. Большинство файлов, установленных в системный каталог Windows, должны использовать этот флаг, включая файлы .OCX, .BPL и .DPL.

Стандартный механизм подсчета ссылок на общие файлы Windows (расположенный в реестре в разделе HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDLLs) используется для отслеживания того, сколько приложений зависит от файла. Каждый раз, когда файл устанавливается, счетчик ссылок на файл увеличивается. (Это происходит независимо от того, действительно ли программа установки заменяет файл на диске.) Когда приложение, использующее файл, удаляется, счетчик ссылок уменьшается. Если счетчик достигает нуля, файл удаляется (с подтверждением пользователя, если также не указан флаг uninsnosharedfileprompt).

person jachguate    schedule 20.02.2013