Автоматическое обновление приложения Windows
Как мне разработать приложение для Windows, чтобы оно автоматически обновлялось на клиентском компьютере, таком как Firefox, Skype и т. Д.?
Есть ли какой-нибудь простой подход или какая-либо библиотека с открытым исходным кодом, которая помогает мне сделать это, просто выполнив несколько шагов или несколько строк кода?
9 ответов
ClickOnce - это то, что вы ищете.
Вы также можете найти эти вопросы SO интересными (которые предлагают несколько разных решений):
Самые популярные фреймворки:
- Google Omaha - это то, что использует Chrome. Очень могущественный.
- Белка - используется в приложениях Electron. Проста в использовании, но не может обновлять установки на уровне машины. Также нет графических уведомлений об обновлениях.
- WinSparkle - дает вам графические уведомления об обновлениях. Но менее зрелый, чем Белка.
- AutoUpdater.NET - Графические и автоматические обновления. Похож на Squirrel и WinSparkle.
Я взял эти ссылки из этой статьи. В нем более подробно рассказывается о плюсах и минусах каждой из фреймворков.
Используйте MD5-Update, просто нужно добавить 5 строк в ваше приложение, не нужно настраивать ваше приложение, только добавьте библиотеку и опубликуйте файлы.
1. Вам нужен веб-сервер с PHP для публикации файлов, включите updt.exe.
2. Добавьте index.php для создания списка файлов обновлений. доступно в репозитории github создания нового приложения с этим кодом.
<?php
$_dat = array();
$_dir=new RecursiveDirectoryIterator(".");
foreach (new RecursiveIteratorIterator($_dir) as $_itm) {
$_fil = str_replace(".".DIRECTORY_SEPARATOR, "", $_itm);
if(!is_dir($_fil) && $_fil != "index.php"){
$_dat[]=array('StrFil' => "$_fil", 'StrMd5' => strtoupper(md5_file($_fil)), 'lonSiz' => filesize($_fil));
}
}
echo json_encode($_dat, JSON_UNESCAPED_UNICODE);
?>
3. Добавьте репозиторий nuget в свой проект.
PM> Install-Package MD5.Update
4. Вызовите библиотеку, когда ваше приложение станет звездой, с URL-адресом вашей папки обновлений, обновите все файлы и загрузите новое приложение в папку обновления, для замены вашего приложения потребуется updt.exe.
string strUrl = "http://yourdomain.com/app/";
if (MD5Update.MD5Update.Check(strUrl, true))
{
Process.Start(AppDomain.CurrentDomain.BaseDirectory + @"updt.exe", AppDomain.CurrentDomain.FriendlyName + " " + Process.GetCurrentProcess().ProcessName);
Application.Exit();
}
5. updt.exe для замены текущего приложения новой папкой обновления приложения в app. доступно в репозитории githubhttps://github.com/jrz-soft-mx/MD5-Update/blob/main/Tools/Tools.zip дляhttps://github.com/jrz-soft-mx/MD5-Update/blob/main/Tools/Tools.zip для создания нового приложения с этим кодом.
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
List<string> lisArg = Environment.GetCommandLineArgs().ToList();
if (lisArg.Count < 2)
{
MessageBox.Show("Please provide App Excutable Name and Procees name");
Application.Exit();
return;
}
string strAppName = lisArg[1];
string strAppProcees = lisArg[2];
Process[] lisPro = Process.GetProcessesByName(strAppProcees);
foreach (Process Pro in lisPro)
{
if (Pro.Id != Process.GetCurrentProcess().Id)
{
Pro.Kill();
Thread.Sleep(1000);
}
}
string strAppMain = AppDomain.CurrentDomain.BaseDirectory + strAppName;
string strAppUpdate = AppDomain.CurrentDomain.BaseDirectory + @"updt\" + strAppName;
if (!File.Exists(strAppMain))
{
MessageBox.Show("App Excutable dosent exists");
Application.Exit();
return;
}
if (!File.Exists(strAppUpdate))
{
MessageBox.Show("App Excutable Updated dosent exists");
Application.Exit();
return;
}
File.Copy(strAppUpdate, strAppMain, true);
long fileSize = 0;
FileInfo currentFile = new FileInfo(strAppMain);
while (fileSize < currentFile.Length)
{
fileSize = currentFile.Length;
Thread.Sleep(1000);
currentFile.Refresh();
}
Process.Start(strAppMain);
}
catch (Exception Ex)
{
MessageBox.Show("An error ocurred");
File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + @"updt_" + DateTime.Now.ToString("yyyyMMddTHHmmss") + " .txt", Ex.ToString());
Application.Exit();
}
Вы можете использовать wyUpdate или .NET Application Updater Component
Я бы добавил еще один возможный вариант:
https://github.com/synhershko/NAppUpdate
Хотя ClickOnce прост и возродился для .NET 5, он все еще имеет множество ограничений, поэтому я обнаружил, что в настоящее время существует лучший вариант: вы можете использовать включенный в Windows 10 механизм доставки приложений под названием AppInstaller, упаковав свое приложение в пакет MSIX. или пакет.
В этом я рассказал о своих выводах, связанных с этой темой. ответе