2012-09-28 7 views
8

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

Я не лучший скриптер/программист, поэтому чем проще ответ, тем лучше.

В настоящее время мой реестр/деинсталляция выглядит так.

[Registry] 
    Root: HKCU; Subkey: "Software\FFSPLIT Overlay Filter"; Flags: uninsdeletekey 


    [UninstallDelete] 
    Type: filesandordirs; Name: "{app}\ffmpeg" 
    Type: filesandordirs; Name: "{app}\OverlayData" 
    Type: files; Name: "{app}\AForge.Controls.dll" 
    Type: files; Name: "{app}\AForge.Imaging.dll" 
    Type: files; Name: "{app}\AForge.Video.DirectShow.dll" 
    Type: files; Name: "{app}\AForge.Video.dll" 
    Type: files; Name: "{app}\AudioFilter.ax" 
    Type: files; Name: "{app}\default.cfg" 
    Type: files; Name: "{app}\DirectShowLib-2005.dll" 
    Type: files; Name: "{app}\ffmpeg.exe" 
    Type: files; Name: "{app}\FFSplit Overlay Filter.ax" 
    Type: files; Name: "{app}\FFsplit.exe" 
    Type: files; Name: "{app}\FFSplitOverlayManager.exe" 
    Type: files; Name: "{app}\librtmp.dll" 
    Type: files; Name: "{app}\msvcp100d.dll" 
    Type: files; Name: "{app}\msvcr100d.dll" 
    Type: files; Name: "{app}\NAudio.dll" 
    Type: files; Name: "{app}\RegisterFilter.bat" 
    Type: files; Name: "{app}\setting.cfg" 
    Type: files; Name: "{app}\UNRegisterFilter.bat" 
    Type: files; Name: "{app}\wavbuffer" 
    Type: files; Name: "{app}\Micfilter.ax" 
+3

Обратите внимание, что вам не нужно '[UninstallDelete]' записи для чего-нибудь, что это установленный на '[Files]' записи - они удалены по умолчанию в любом случае. – Miral

ответ

16

У InnoSetup нет условного параметра проверки на удаление, поэтому вам нужно сделать это самостоятельно. Поэтому вам нужно удалить флаг uninsdeletekey, который автоматически удалит ключ реестра, и в конце процесса удаления вы можете попросить пользователя, хочет ли он удалить этот ключ (в каком-то значимом пути сообщения) и удалить ключ вручную. Следующий сценарий делает это на этапе удаления после удаления, в какое время приложение успешно удалено. Вы можете следить за commented version:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

#define FilterRegKey "Software\FFSPLIT Overlay Filter" 

[Registry] 
Root: HKCU; Subkey: "{#FilterRegKey}" 

[Code] 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
begin 
    if CurUninstallStep = usPostUninstall then 
    begin 
    if RegKeyExists(HKEY_CURRENT_USER, '{#FilterRegKey}') then 
     if MsgBox('Do you want to delete the overlay filter registry key ?', 
     mbConfirmation, MB_YESNO) = IDYES 
     then 
     RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, '{#FilterRegKey}'); 
    end; 
end; 
+1

Спасибо, человек, я очень благодарен. Спасла мне довольно много головной боли, и я обязательно буду говорить об этом с этого момента. – user1706975

+2

Обратите внимание, что это приведет к удалению ключа от одного пользователя. Если приложение установлено для каждого компьютера, а несколько пользователей запускают его, настройки останутся для всех, кроме тех, кто случайно запускает деинсталлятор. Если это вас беспокоит, для этого нет решения, кроме как сделать вашу установку для каждого пользователя ('PrivilegesRequired = lower'), что, в свою очередь, связано с ограничениями на то, где вы можете установить и какие флаги вы можете использовать. – Miral

Смежные вопросы