Реализовано автоматическое обновление.
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
|||||||
1.0.16
|
1.0.17
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|||||||
@@ -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")]
|
||||||
|
|||||||
Generated
+1
-1
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user