• На форуме разрешено создавать темы только для пользователей, кто имеет группу «Продавец». Приобрести её можно здесь: https://dstock.biz/account/upgrades. Либо в телеграме https://t.me/DustDS

Статья Как сделать автообновление для программы (C#)

Irval

Главный Модератор
Главный Модератор

Irval

Главный Модератор
Главный Модератор
Статус
Оффлайн
Регистрация
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. Если будут вопросы по коду - пишите, дам пояснения.

Важно: файлы программы должны находится в отдельной папке, иначе весь корень будет очищен!
 

wenstony

Модератор
Пользователь

wenstony

Модератор
Пользователь
Статус
Оффлайн
Регистрация
25 Мар 2019
Сообщения
199
Реакции
41
В принципе, если обновлять нужно не много файлов(если программа заключена в одном единственном файле), то можно просто прописать путь до удаления определённого файла(или нескольких в небольшом кол-ве), тогда конечно и объём кода увеличится, но решится проблема с очищением корневой папки.
 
Сверху