Как автоматически обновлять приложение без ClickOnce?
Для проекта, над которым я работаю, мне не разрешено использовать ClickOnce. Мой босс хочет, чтобы программа выглядела "реальной" (с установщиком и т.д.).
Я установил Visual Studio 2012 Professional и играл с InstallShield, и это определенно делает хороших инсталляторов, но я не могу понять, как включить приложение в "автоматическое обновление" (то есть, когда он запускается, проверяет, чтобы убедиться, что он использует последнюю версию).
Мне было предложено внести небольшое изменение в код - переключая дополнение к вычитанию, и я действительно не хочу, чтобы людям приходилось удалять старую версию, а затем нужно переустанавливать новую версию каждый раз, когда я сделайте небольшое изменение, подобное этому.
Как я могу проверить приложение на наличие обновлений и установить их? Или это невозможно (или не просто)?
Ответы
Ответ 1
Есть много вопросов об этом, поэтому я расскажу вам об этом.
Одна вещь, которую вы хотите, чтобы предотвратить необходимость удаления, заключается в том, что вы используете тот же код upgrade для каждой версии, но изменяете код продукта. Эти значения находятся в свойствах проекта Installshield.
Некоторые ссылки:
Ответ 2
Я думаю, что вы должны проверить следующий проект на codeplex.com
http://autoupdater.codeplex.com/
Это примерное приложение разработано на С# в виде библиотеки с названием проекта "AutoUpdater". DLL "AutoUpdater" можно использовать в приложении Windows С# (WinForm и WPF).
В AutoUpdater есть определенные функции:
- Простота внедрения и использования.
- Автоматическое повторное использование приложения после проверки обновления.
- Процесс обновления прозрачен для пользователя.
- Чтобы избежать блокировки основного потока с помощью многопоточной загрузки.
- Возможность обновления системы, а также программы автоматического обновления.
- Код, который не нуждается в изменении при использовании различными системами и
может быть скомпилирован в библиотеке.
- Легко для загрузки файлов обновлений.
Как использовать?
В программе, которую вы хотите автоматически обновлять, вам просто нужно вызвать функцию AutoUpdate в основной процедуре. Функция AutoUpdate проверит версию с тем, что прочитано из файла, расположенного на веб-сайте/FTP. Если версия программы ниже, чем прочитанная программа загружает программу автоматического обновления и запускает ее, а функция возвращает значение True, что означает, что будет выполняться автоматическое обновление, а текущая программа должна быть закрыта. Программа автоматического обновления получает несколько параметров из программы, подлежащей обновлению, и выполняет автоматическое обновление, и после этого запускает обновленную систему.
#region check and download new version program
bool bHasError = false;
IAutoUpdater autoUpdater = new AutoUpdater();
try
{
autoUpdater.Update();
}
catch (WebException exp)
{
MessageBox.Show("Can not find the specified resource");
bHasError = true;
}
catch (XmlException exp)
{
bHasError = true;
MessageBox.Show("Download the upgrade file error");
}
catch (NotSupportedException exp)
{
bHasError = true;
MessageBox.Show("Upgrade address configuration error");
}
catch (ArgumentException exp)
{
bHasError = true;
MessageBox.Show("Download the upgrade file error");
}
catch (Exception exp)
{
bHasError = true;
MessageBox.Show("An error occurred during the upgrade process");
}
finally
{
if (bHasError == true)
{
try
{
autoUpdater.RollBack();
}
catch (Exception)
{
//Log the message to your file or database
}
}
}
#endregion
Ответ 3
Наиболее распространенным способом является размещение простого текстового файла (лучше XML/JSON) на вашем веб-сервере с последней версией сборки. Затем приложение загрузит этот файл, проверит версию и запустит программу обновления. Типичный файл будет выглядеть так:
Файл обновления приложения//Уникальная строка, позволяющая вашему приложению распознавать тип файла
версия: 1.0.0//последняя версия сборки
download: http://yourserver.com/...//Ссылка на версию для скачивания
redirect: http://yournewserver.com/...//Я использовал это поле в случае изменения адреса сервера. Это позволит клиенту узнать, что ему нужно искать новый адрес.
Вы также можете добавить другие важные детали.
Ответ 4
Это код для обновления файла, но не для установки
Эта программа выполняется с помощью dos для копирования файлов до последней даты и автоматического запуска вашей программы. может помочь вам
открыть блокнот и сохранить файл ниже с помощью внешнего .bat
xcopy \\IP address\folder_share_name\*.* /s /y /d /q
start "label" /b "youraplicationname.exe"
Ответ 5
A Lay men way
в Main() переименуйте исполняемый файл сборщика .exe в какую-то вещь
проверьте дату и время создания.
и обновленное время даты файла и копирование в папку приложения.
//Rename he executing file
System.IO.FileInfo file = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
System.IO.File.Move(file.FullName, file.DirectoryName + "\\" + file.Name.Replace(file.Extension,"") + "-1" + file.Extension);
затем выполните проверку логики и скопируйте новый файл в папку