У меня нет точного ответа на лучшие варианты, но я использовал ClickOnce и могу дать несколько советов.
Существует несколько вариантов обновления с ClickOnce (перед запуском, после запуска проверяйте каждый раз, проверяйте каждые X часов / дней / недель и т. Д.). Вы также можете выбросить их и написать код для проверки обновлений. Это не «подталкивание» с сервера, но ваш клиент может опросить обновления, которые будут следующей лучшей вещью. Просто помните, что после обновления приложение будет перезапущено, чтобы увидеть изменения.
ClickOnce загружает только измененные файлы. Тем не менее, диалоговое окно прогресса всегда показывает весь размер приложения, даже если оно загружает только один файл. Все беспокоятся об этом, но это просто ошибка в диалоге прогресса.
Наконец, я большой поклонник простоты. Очень легко обдумать эти вещи и создать чудовище, которое никогда не было нужно. Мы пережили нечто подобное в моей компании. Мы так беспокоились о том, что пользователи загружают ненужные байты, мы разделили наши приложения на более мелкие сборки. Это превратилось в кошмар; приложения было сложнее поддерживать и работать хуже на клиенте. Мы наконец отменили все это и потратили впустую недели, чтобы закончить с того, с чего начали.
Я не говорю, что вам не нужны запрашиваемые вами функции, я не знаю ваш сценарий. Просто сначала обучай себя и знай, во что ты ввязываешься.