Я не уверен, как это сделать конкретно с C #, но при использовании Nullsoft Installer я видел такой подход: перед установкой проверьте созданный раздел реестра. во время установки.
Деинсталляторы отображаются на панели управления «Установка и удаление программ». Список удаления хранится в папке HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall. Если установщик регистрирует деинсталлятор, ключ деинсталлятора является хорошим ключом для проверки, так как:
При условии, что программа устанавливается для всех пользователей, проверяемый ключ должен находиться под HKey Local Machine (HKLM), а не ключом, специфичным для текущего пользователя (HKey Current User). Ключ деинсталлятора находится под HKLM
Иногда несколько версий одной и той же программы необходимо устанавливать параллельно. Ключи деинсталлятора должны быть специфичны для каждой версии, поэтому можно добавлять правила для проверки номера версии установщика по установленным версиям.
Существует ограничение на проверку ключей реестра, чтобы определить, установлена ли программа: если программа удалена из Program Files вручную (без использования деинсталлятора), переустановка завершится неудачно. Чтобы избежать этой проблемы, после нахождения раздела реестра для деинсталлятора установщик может проверить, существует ли программа деинсталлятора. Если это так, то, вероятно, можно предположить, что программа все еще установлена.
Во время игры с установщиками и условной установкой следует помнить, что иногда переустановка полезна для устранения проблем. Может быть утомительно проходить (хлопотное) удаление, чтобы иметь возможность переустановить.
См. Страница NSIS по установке и удалению программ для получения дополнительной информации об удалении разделов реестра.