Я делал это раньше следующим способом:
1 - сохранить «официальную» сборку в определенном сетевом местоположении
2 - пользователь запускает программу со своего локального компьютера
3 - При запуске программа сравнивает собственную версию файла с # на сервере.
4 - Если две версии отличаются, скопируйте новую версию с сервера и перезапустите.
Довольно просто, и работает, пока вы находитесь в интрасети.
Шаг 4 - единственная сложная часть. Вы не можете заменить файл во время его использования, поэтому вам нужно либо
1 - сначала переименуйте текущий (используемый) файл, а затем скопируйте новый. Поскольку вы будете обновлять много раз, вы также захотите удалить все существующие переименованные копии, которые находятся рядом.
или
2 - Пользователь должен запустить «вспомогательное» приложение, которое проверяет версию, обновляет при необходимости и затем запускает реальное приложение. Конечно, вам придется иметь дело с обновлением вспомогательного приложения.