Реализовано автоматическое обновление.

This commit is contained in:
Danil Kislov
2019-03-19 10:37:22 +03:00
parent 7d236ba9b0
commit 554315007f
6 changed files with 126 additions and 51 deletions
+1 -1
View File
@@ -1 +1 @@
1.0.16 1.0.17
+1
View File
@@ -61,6 +61,7 @@
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.DirectoryServices" /> <Reference Include="System.DirectoryServices" />
<Reference Include="System.IO.Compression" /> <Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security" /> <Reference Include="System.Security" />
<Reference Include="System.ServiceModel" /> <Reference Include="System.ServiceModel" />
+3 -3
View File
@@ -26,6 +26,6 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.16")] [assembly: AssemblyVersion("1.0.17")]
[assembly: AssemblyFileVersion("1.0.16")] [assembly: AssemblyFileVersion("1.0.17")]
[assembly: AssemblyInformationalVersion("1.0.16")] [assembly: AssemblyInformationalVersion("1.0.17")]
+1 -1
View File
@@ -114,7 +114,7 @@
// //
// tmrUpdate // tmrUpdate
// //
this.tmrUpdate.Interval = 1000; this.tmrUpdate.Interval = 10000;
this.tmrUpdate.Tick += new System.EventHandler(this.tmrUpdate_Tick); this.tmrUpdate.Tick += new System.EventHandler(this.tmrUpdate_Tick);
// //
// frmMain // frmMain
+64
View File
@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.IO.Compression;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
@@ -188,6 +189,8 @@ namespace JiraTimeBotForm.UI
} }
private void tmrUpdate_Tick(object sender, EventArgs e) private void tmrUpdate_Tick(object sender, EventArgs e)
{
try
{ {
tmrUpdate.Interval = 8 * 60 * 60 * 1000; tmrUpdate.Interval = 8 * 60 * 60 * 1000;
@@ -206,6 +209,67 @@ namespace JiraTimeBotForm.UI
{ {
var downloadUrl = checker.GetDownloadUrl(release); var downloadUrl = checker.GetDownloadUrl(release);
_log.Info($"Доступна новая версия: {gitVersion} {downloadUrl}"); _log.Info($"Доступна новая версия: {gitVersion} {downloadUrl}");
var success = checker.DownloadFile(downloadUrl);
if (!success)
{
return;
}
var result = InstallUpdate(gitVersion);
if (result)
{
//если обновились - отключаем до рестарта
tmrUpdate.Enabled = false;
}
}
}
catch (Exception ex)
{
//в процессе обновления ни при каком раскладе мы не должны уложить бота.
_log.Error($"Фатальная ошибка в процессе обновления: {ex.Message}");
}
}
private bool InstallUpdate(Version gitVersion)
{
try
{
_log.Info($"Устанавливаю обновление до версии {gitVersion}.");
//Rename he executing file
System.IO.FileInfo appFile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
var bkpDir = Path.Combine(appFile.DirectoryName, "bkp");
if (!Directory.Exists(bkpDir))
{
Directory.CreateDirectory(bkpDir);
}
using (ZipArchive archive = ZipFile.OpenRead(Path.Combine(appFile.DirectoryName, "update.zip")))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
var zipEntryPath = Path.Combine(appFile.DirectoryName, entry.FullName);
if (File.Exists(zipEntryPath))
{
System.IO.FileInfo zipEntryFile = new System.IO.FileInfo(zipEntryPath);
if (File.Exists(bkpDir + "\\" + zipEntryFile.Name))
{
File.Delete(bkpDir + "\\" + zipEntryFile.Name);
}
System.IO.File.Move(zipEntryFile.FullName, bkpDir + "\\" + zipEntryFile.Name);
}
entry.ExtractToFile(zipEntryPath);
}
}
_log.Info("Обновление установлено. Перезапустите программу для применения изменений.");
return true;
}
catch (Exception)
{
_log.Error($"Что-то пошло не так при обновлении.");
return false;
} }
} }
} }
+12 -2
View File
@@ -38,12 +38,22 @@ namespace JiraTimeBotForm.Update
return release; return release;
} }
public void DownloadFile(string url) public bool DownloadFile(string url)
{ {
try
{
using (var client = new WebClient()) using (var client = new WebClient())
{ {
client.Headers.Add("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0"); client.Headers.Add("User-Agent",
"Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0");
client.DownloadFile(url, "update.zip"); client.DownloadFile(url, "update.zip");
return true;
}
}
catch (Exception)
{
return false;
} }
} }