Вопрос в том, насколько сложна ваша программа. Многие программы для Windows имеют зависимости от времени выполнения Visual Studio C ++, .Net, Java и т. Д., Которые не предоставляются операционной системой-субстратом. Это означает, что для работы ваших программ эти компоненты должны быть уже в системе.
Если эти предварительные условия отсутствуют, ваша программа даже не загружается, поэтому вы даже не можете заставить свою программу проверять их и просить пользователя пойти и получить их. Вот тут-то и приходит инсталлятор, так как он, как правило, не имеет каких-либо предварительных условий, но может определить те, которые нужны вашей программе, и может либо попросить вас пойти и получить их, либо попытаться установить их для вас.
Кроме того, многие программы нуждаются в логической, а также физической, инсталляционной работе, выполняемой в рамках развертывания. Это может означать изменения в реестре (такие как регистрация COM), изменения в IIS (настройка веб-приложения и виртуального каталога) или изменения в диспетчере управления службами (настройка служб Windows).
Короче говоря, если ваша программа не является полностью автономной и не имеет внешних зависимостей, установщик - единственный способ вывести ваше приложение на рабочий стол.