wolkow70, проще, проще....
Код:
Section /o "Un.Перезагрузка Проводника Windows" RestartExplorer
SectionIn 1
SetRebootFlag true
ExecWait 'taskkill /F /IM explorer.exe' $0
Sleep 500
StrCmp $0 0 0 +2
Exec "explorer.exe"
Delete "$INSTDIR\ShellEx\XnViewShellExt.dll"
RMDir /r "$INSTDIR\ShellEx\"
RMDir /r "$INSTDIR\"
SectionEnd
Section Uninstall Uninstall
SectionIn 1 RO
;
!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED "$INSTDIR\ShellEx\XnViewShellExt.dll"
;
SetShellVarContext all
IfRebootFlag +2
RMDir /r "$INSTDIR"
IfRebootFlag 0 +2
RMDir /r /REBOOTOK "$INSTDIR"
SectionEnd
;
И не нужно объявлять пользовательскую переменную (которую обязательно сначало нужно иницилизировать в первой функции деинсталла), просто рулим флагами перезагрузки.