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.
В данном гайде речь пойдет о том, как создать само обновляющийся продукт средствами 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.