Бесплатное решение для автоматического обновления с приложением .NET / C #? - PullRequest
41 голосов
/ 24 декабря 2010

Из поиска я вижу, что об этом спрашивали снова и снова, но не достаточно адекватно, так что здесь. Я разработчик-любитель без бюджета. Разрабатываемая мною программа нуждалась в регулярных исправлениях ошибок, и мне и пользователям надоело обновлять вручную.

Я, потому что мое текущее решение обновить текстовый файл через FTP и мои ссылки для скачивания на веб-сайте, а затем надеется, что пользователи увидят «есть сообщение об обновлении», и, наконец, заставит их потом потрудиться вручную загрузить обновление, ну откровенно говоря, ужасно.

Пользователи, потому что, ну, "Собираетесь ли вы когда-нибудь реализовать автообновление?" "Будет ли когда-нибудь функция автообновления?" И если мне случится испортить процесс обновления, вилы начнут прибывать.

За прошлое я посмотрел:

  • WinSparkle - Нет обновлений в приложении, а DLL составляет 500 КБ. Мое текущее решение - несколько килобайт в исполняемом файле, и в нем нет обновлений в приложении.
  • Компонент обновления приложения .NET - К сожалению, я не могу понять документацию.
  • Автообновление Эдуардо Оливеры - Похоже, это не поддерживает ничего, кроме работы с файлами, которые не используются.
  • wyUpdate - wyBuild не является бесплатным, и хотя спецификация wyUpdate доступна, она просто слишком сложна и отнимает много времени.
  • Обновление AppLife - То же самое в последнем предложении.
  • ClickOnce - Обходные пути для реализации запуска при запуске огромны, ужасны и не стоят того для такой простой функции. Издательство - это боль; FTP вручную и замена всех файлов требуется для серверов без расширений FrontPage.

Очень разочаровывает, что ситуация в Windows такая, когда у вас есть действительно хорошие и простые реализации для Mac OS X, такие как Sparkle .

Ответы [ 6 ]

19 голосов
/ 24 декабря 2010

Реализуй это сам! Это будет весело. Создайте отдельное приложение, которое содержит только логику обновления, то есть загрузите файлы онлайн, загрузите их, замените локальные файлы и покажите это визуально пользователю.

Таким образом, ваше основное приложение может проверять наличие обновлений, и, если они существуют, оно предлагает пользователю возможность обновления. Если пользователь захочет, он запустит программу обновления, закроет себя (чтобы обновление могло произойти) и запустит.

Единственные вещи, которые вам нужны, легко доступны в C #, доступе по FTP и IO.

Редактировать: Я знаю, что это не что-то ужасно легкое, но это отличный шанс научиться:

  • Как (правильно) загружать файлы абстрактным способом, который может быть расширен до ftp, http и т. Д.
  • Как (правильно) выполнить простую задачу над многими файлами - копировать или перезаписывать их (это подразумевает обработку ошибок).
  • Практикуйтесь (потому что нет «правильного» способа) для наложения и инкапсуляции части программного обеспечения.
  • Как работать с ОС / другим программным обеспечением (антивирусом / брандмауэром и т. Д.), Не сотрудничающим.

Это все, что нам всем нужно хорошо знать - если для написания программы обновления требуется несколько недель, значит, вам потребовалось несколько недель обучения. Если вам не нужно учиться, пора оттачивать свои навыки! Если вы не знаете, если вам нужно, время, чтобы узнать! :)

Примечание: я знаю Мне нужно Нужно лучше изучить файловый и сетевой ввод / вывод

7 голосов
/ 29 октября 2011

Надо было обновлять это давным-давно, ой!

Но в любом случае, я уже некоторое время использую SparkleDotNET , и он работает совершенно замечательно.Здесь и там есть несколько маленьких ошибок, но я уже помог избавиться от некоторых из них, и, надеюсь, я смогу избавиться и от других:)

Для тех, у кого есть время бежатьфункциональность публикации Visual Studio, приложение которой относительно автономно и не требует ничего, кроме запуска при запуске, я бы точно порекомендовал ClickOnce. MetroTwit использует его, и у него есть хороший интерфейс обновления в приложении, так что он кажется гибким (по крайней мере, в определенной степени).Для запуска при запуске, можно сделать это, но методы для этого довольно хакерские и не очень хорошо работают.

3 голосов
/ 13 июня 2012

Вы можете попробовать Autoupdater.NET из codeplex Я разработал его сам, и он очень хорошо работает в моих приложениях. Вам просто нужно добавить одну строку в ваш код, и все готово. Также это с открытым исходным кодом, так что вы можете изменять и использовать, как вы хотите.

1 голос
/ 13 июня 2012

Существует также DDay обновление с открытым исходным кодом, которое используется одним из моих клиентов. Мы / они в первую очередь заинтересованы в этом в контексте службы Windows, для этого она работает достаточно хорошо.

1 голос
/ 24 декабря 2010

Вы даже не можете разработать внешнее приложение, но реализовать его как модуль вашего приложения, например, в namespace Update, и использовать динамический сборщик сборок, чтобы сгенерировать исполняемый файл, запустить его и выйти из главного приложения, запустить его снова, когда произойдет обновлениезакончено.

Еще немного info .

0 голосов
/ 29 октября 2011

все парни правы, особенно посмотрите на ответ абатищева. Но я думаю, что кое-что еще нужно, чтобы этот парень забыл это. попытайтесь разработать свой проект "модульно". введите им свой код в библиотеку классов так, как вы можете. поэтому во время операции исправления замените один из них. вы делаете для этих случаев?

разработали проект обновления. У меня есть три вида исправлений. 1- ОШИБКА в работе программы и необходимость заменить файл DDL 2- Ошибка в программе и необходимо обновить текущий исполнительный файл программы 3- ошибка или изменение базы данных и необходимо выполнить запрос к серверу sql

в таблице на веб-хосте я помещаю историю версий и каждый раз, когда мое приложение запускается, проверяет наличие новой версии. Если какое-либо обновление существует, проверяет его тип и загружает его, и выполнение соответствующих действий зависит от вида и параметров обновления

удачи, чувак

...