- Статус
- Оффлайн
- Регистрация
- 31 Май 2019
- Сообщения
- 245
- Реакции
- 84
Доброго времени суток
Многие новички в программировании на C# (и в целом) могут задаваться вопросом: "Как сделать автообновление моей программы?". Для начала необходимо написать небольшой бекенд для получения/изменения текущей версии программы, а также ссылки на скачивание архива с программой. Объяснять, как это делать я, пожалуй, не стану. Существует слишком много способов связи клиент-серверного приложения: сокеты, простые запросы к странице php и т.д.
Для обновления программы, потребуется создать дополнительный файл Update.exe со следующим кодом:
C#:
class Program
{
static string path;
const int SW_HIDE = 0;
const int SW_SHOW = 5;
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[STAThread]
static void Main(string[] args)
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
Thread.Sleep(1000);
using (WebClient webClient = new WebClient())
{
path = args[1].Substring(0, args[1].LastIndexOf("//") + 1);
DirectoryInfo folder = new DirectoryInfo(path);
foreach (FileInfo file in folder.GetFiles())
{
if (file.Name != AppDomain.CurrentDomain.FriendlyName && file.Name != Process.GetCurrentProcess().ProcessName)
file.Delete();
}
foreach (DirectoryInfo dir in folder.GetDirectories())
dir.Delete(true);
webClient.DownloadFile(new Uri(args[0].Substring(0, args[0].Length - 1).Split('&')[1]), path + "YOURNAME.zip");
using (ZipFile zip = ZipFile.Read(path + "YOURNAME.zip"))
{
foreach (ZipEntry e in zip)
{
e.Extract(path, ExtractExistingFileAction.DoNotOverwrite);
}
zip.Dispose();
}
File.Delete(path + "YOURNAME.zip");
Process.Start(path + "FILE.exe");
}
}
}
В саму программу после вызова события обновления пихаем:
C#:
public static void Update(string uri)
{
Process.Start(new ProcessStartInfo("Update.exe", $"{uri}, {System.Windows.Forms.Application.ExecutablePath}"));
System.Windows.Forms.Application.Exit();
}
Готово, теперь все файлы вашей программы могут быть обновлены с помощью одного файла - Update.exe. Если будут вопросы по коду - пишите, дам пояснения.
Важно: файлы программы должны находится в отдельной папке, иначе весь корень будет очищен!