Sann-X!, можно попробовать такой вариант:
Код:
ExecWait 'regsvr32.exe /s /u "$INSTDIR\Sample.dll"' ;Снимаем регистрацию с DLL
Rename "$INSTDIR\Sample.dll" "$INSTDIR\Sample.tmp" ;Переименовываем используемую DLL во временный файл
Delete /REBOOTOK "$INSTDIR\Sample.tmp" ;Пытаемся удалить временный файл и добавляем флаг удаления после перезагрузки
Дальше копируем новую DLL и регистрируем её, с этим проблем не возникнет, т.к. имя уже не занято
Можно вывести на экран сообщение о необходимости перезагрузки, если старая DLL до сих пор используется и удалить её до перезагрузки не получилось:
Код:
${If} ${FileExists} "$INSTDIR\Sample.tmp"
MessageBox IDOK "Для завершения установки требуется перезагрузка"
${EndIf}
Эту же перезагрузку можно организовать не через сообщение на экране, а на финишной странице установщика с двумя радиобуттонами, в документации это должно быть описано, по памяти не скажу.