wolkow70, А почему бы не сделать, вот так, проверять в функции перед финишем , есть ли залоченный файл, то предложить о перезагрузке, а если нету файла, то не предлагать - это будет корректнее..
Код:

!include "MUI2.nsh"
Name "Modern UI Test"
OutFile "UnFinish.exe"
InstallDir "C:\Test_Modern"
!insertmacro MUI_PAGE_INSTFILES
;----------------------------------
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
UninstPage custom un.INSTFILES_LEAVE
!insertmacro MUI_UNPAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
Section Install
SetOutPath "$INSTDIR"
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
Section Uninstall
Sectionin RO
;тут стандартное удаление
SectionEnd
Section un.Restart RestartExplorer
;тут нестандартное удаление, с перезагрузкой проводника
SectionEnd
Function un.INSTFILES_LEAVE
${If} ${FileExists} "путь к залоченному файлу" ;или папка т.е наличие папки
SetRebootFlag true ;если есть файл, предлагать перезагрузку
${Else}
SetRebootFlag false ;если нету файла, не предлагать перезагрузку
${EndIf}
FunctionEnd