В идеале ваше приложение должно создавать Mutex при запуске и отпускать его при выключении. Затем вы можете написать пользовательское действие в установщике, который ищет этот мьютекс и блокирует удаление, если мьютекс присутствует.
Но, честно говоря, большинство людей этого не делают. Они просто используют встроенное поведение FilesInUse.