PDA

Просмотр полной версии : [Руководство] Автообновление. ClickOnce .NET Version


Kitsune
08.08.2010, 17:13
> Автообновление средствами ClickOnce <

В данном гайде речь пойдет о том, как создать само обновляющийся продукт средствами Visual Studio.

Теория:
ClickOnce — технология Майкрософт для развертывания Windows Form или Windows Presentation Foundation приложений. Она подобна технологии Java Web Start для Java Platform. Данная технология доступна с версии .NET 2.0 и выше.

Конечный материал данной статьи (скрин):

[Ссылки могут видеть только зарегистрированные и активированные пользователи]


[Ссылки могут видеть только зарегистрированные и активированные пользователи]


[Ссылки могут видеть только зарегистрированные и активированные пользователи]


[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Создание приложения:

Сейчас мы разберем как из кода можно взаимодействовать с ClickOnce сборками.
Для реализации проекта мне потребовалось 2 формы:


frmMain.cs
главная форма нашего приложения
frmUpdater.cs
Форма обновления проекта



Все классы, которые нам понадобятся находятся в пространстве имен System.Deployment.Application. Соответственно нам надо будет его подключить в коде.

using System.Deployment.Application;


Код frmMain.cs (главной формы приложения):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Deployment.Application;

namespace SelfUpdatableApp
{
public partial class frmMain : Form
{
// Объект класса, через который мы получим
// всю необходимую информацию
private ApplicationDeployment updater;

public frmMain()
{
InitializeComponent();

// Назначим обработчик события загрузки формы
this.Load += new EventHandler(Form1_Load);
}

// Собственно сам обработчик
private void Form1_Load(object sender, EventArgs e)
{
// Осуществляем проверку. Если приложение установлено через ClickOnce
if (ApplicationDeployment.IsNetworkDeployed)
{
// То мы инициализируем объект объявленный выше, указывая ссылку на текущиую развертку
updater = ApplicationDeployment.CurrentDeployment;
// Пишем в лейбле текущую версию развертки.
this.lVersion.Text = "Версия: " + ApplicationDeployment.CurrentDeployment.CurrentVer sion;
}
// в противном случаи
else
{
this.lVersion.Text = "Версия не была установлена через ClickOnce.";
// выключаем кнопку обновления
this.bCheck.Enabled = false;
}
}

// Обработчик события нажатия на кнопку "Проверить обновления"
private void bCheck_Click(object sender, EventArgs e)
{
// Если сборка установлена через ClickOnce, то объект будет не null
// соответственно мы перейдом дальше по коду
if (updater != null)
{
// Метод CheckForUpdate вернет True, если есть доступные обновления
if (updater.CheckForUpdate())
{
// Если таковые есть, то мы показываем форму автообновления
new frmUpdater().ShowDialog();
}
else
{
// Если обновлений нет, сообщаем об этом
MessageBox.Show("У вас самая последняя версия.");
}
}
}
}
}


Код frmUpdater.cs (формы автообновления):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Deployment.Application;

namespace SelfUpdatableApp
{
public partial class frmUpdater : Form
{
// Все тот же объект
private ApplicationDeployment updater;

public frmUpdater()
{
InitializeComponent();

// По скольку формы мы показываем только в том случаи если развертка через ClickOnce установлена
// то здесь мы можем не делать проверки дополнительные
updater = ApplicationDeployment.CurrentDeployment;
// Указываем обработчики событий: изменения прогресса и завершения обновления
updater.UpdateProgressChanged += new DeploymentProgressChangedEventHandler(updater_Upda teProgressChanged);
updater.UpdateCompleted += new AsyncCompletedEventHandler(updater_UpdateCompleted );
}

// Обработчик события изменения прогресса
private void updater_UpdateProgressChanged(object sender, DeploymentProgressChangedEventArgs e)
{
this.pBar.Value = e.ProgressPercentage;
}

// Обработчик события заверешния обновления
private void updater_UpdateCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Обновление закончено. Нажмите ОК для перезапуска приложения.");
// После нажатия на ОК, приложение перезапуститься
Application.Restart();
}

private void bUpdater_Click(object sender, EventArgs e)
{
// Начать обновление асинхронно
updater.UpdateAsync();
}

private void bCancel_Click(object sender, EventArgs e)
{
// Отмена обновления
this.DialogResult = DialogResult.Cancel;
}
}
}



Настройка публикаций:

После того как мы создали наше приложение, которое мы хотим распространять, нам необходимо настроить правила публикации и автообновления.
Настройки все располагаются в свойствах проекта. В настройки проекта можно попасть двумя способами:

Через обозреватель проекта:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Правой кнопкой мыши щелкнуть по названию проекта и выбрать Properties.

[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Через верхнее меню:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]



Попав в настройки, нас интересует только одна вкладка:


[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Примечание:

Путь, куда будет сохранен установщик после публикации вы можете выбрать свой, например C:\Deploy.
Версию продукта вы тоже можете выбрать самостоятельно.
Галочка под версией означает, что после каждой публикации самое последнее число в версии будет увеличиваться на 1.




Кнопки в правой части:

Application Files
Здесь мы можем выбрать какие файлы из проекта мы включаем в развертку, а какие нет.
Prerequesites
Здесь мы можем указать компоненты, которые необходимы для полноценной работы нашего приложения. Допустим .NET Framework 3.5SP1, а так же настроить откуда будут взяты эти компоненты.
Updates
Здесь мы настраиваем как у нас будет происходить обновления:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Options

[Ссылки могут видеть только зарегистрированные и активированные пользователи]



Нам нужен на Publish Wizzard
Перед нам появится мастер публикации.

На первой страницу мы выбираем, куда будет сохранена развертка. Допустим C:\Deploy.
На второй страницу мы выбираем как пользователь будет устанавливать наше приложение. Выбираем: From CD-ROM.
На третей странице мы выбираем как пользователь будет получать обновления. Мы выбираем 2ую точку, а именно то, что пользователь автоматически не будет ничего получать.
На четвертой странице мы видим все настройки, которые мы приминим к публикации и нажимаем на кнопку Finish.
После нажатия, начнется процесс построения развертки. Как только он закончится перед нами появится папка, куда мы выбрали сохранять развертку. (C:\Deploy).



У нас есть развертка, теперь нам необходимо залить все файлы, что лежат в папке Deploy к нам на сервер, именно туда, куда мы указали(в настройках обновления, источник, который будет проверяться) В моем случаи это был "[Ссылки могут видеть только зарегистрированные и активированные пользователи]"


После этого действия, мы тестируем все :) и радуемся.


Во вложении находится готовый проект на Visual Studio 2010.

witcherD
08.08.2010, 19:17
Меня интересуют несколько вопросов:
1. Как поведет себя программа если при обновлении появилась ошибка. Как при автоматическом обновлении, так и при ручном.
2. Приложения, развернутые с помощью ClickOnce сохраняются не по желанию пользователя, а в папку с кешем ClickOnce. И это очень неудобно, приходится далеко лезть. Хотелось бы хотя бы ярлыки на рабочем столе и меню в меню Пуск.
3. Во вкладке deployment есть замечательная галочка "use ".deploy" file extension". Вещь безусловно нужная, но про нее не было ни слова.
4. Как добавлять дополнительные файлы находящиеся в проекте. И как добавлять дополнительные файлы находящиеся в другом проекте этого же решения;)
5. Хоть пару слов о манифестах)

Kitsune
08.08.2010, 19:30
witcherD, вопросы конечно довольно интересные, но не актуальные, для людей, кому был адресован этот гайд.

Суть этого небольшого гайда - научить примитивным действиям с ClickOnce и общим понятия. Расписывать все тонкости смысла я не вижу, ибо это уже сделано многими людьми.

Очень хороший и познавательный видеоматериал на эту тему: Использование ClickOnce для быстрого разворачивания приложений ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).