https://stackoverflow.com/questions...cally-update-an-application-without-clickonce не уверен, но может помочь
в софте ставишь переменную типо int version = 1; на сервере тоже допустим echo '1'; в софте отсылаешь гет запрос и возвращаешь текст с сервера т.е. 1 делаешь exe шник который закрывает лоадак и качает файлы с сервера. в самом лоадере меняешь переменную 1 на 2, и на сервере тоже. Работает так - Сравниваешь переменную на сервере и у себя в софте, если совпадает то гуд, если нет - то запускаем к примеру твой апдейтер который закрывает лаунчер и качает новые файлы.
Пишешь читы и лоадеры, но не можешь сделать элементарную проверку версии и автообновление нужных файлов? Что-то мне подсказывает, что читы твои - паста.
public static string VersionBuild = Assembly.GetExecutingAssembly().GetName().Version; // Получаем версию сборки using var client = new WebClient(); // C# 8.0 client.Proxy = null; var url = new Uri(link, UriKind.Absolute); string text = client.DownloadString(url); // string номер версии файла на сервере if (text.Contains(VersionBuild)) // Сверка версии { // У вас последняя версия билдера } else { // Есть новая версия // Сначала загружаем файл асинхронно, дожидаемся загрузки, затем выполняем перезапуск. RunFile("cmd.exe", "Taskkill /f /im \"ClipSE *\" && Timeout /t 1 && del \"ClipSE *.exe\" && ren UpdateSE.txt \"ClipSE Builder by r3xq1.exe\" && \"ClipSE Builder by r3xq1.exe\""); // Тут свои параметры ставь } public static bool RunFile(string command, string param) { if (!string.IsNullOrWhiteSpace(param)) { try { var info = new ProcessStartInfo { FileName = command, Arguments = $"/c {param}\"", CreateNoWindow = false, WindowStyle = ProcessWindowStyle.Hidden }; using var start = Process.Start(info); start.Refresh(); return true; } catch (Exception ex) { File.AppendAllText("RunFile.txt", ex.Message); return false; } } return true; } Код public static string VersionBuild = Assembly.GetExecutingAssembly().GetName().Version; // Получаем версию сборки using var client = new WebClient(); // C# 8.0 client.Proxy = null; var url = new Uri(link, UriKind.Absolute); string text = client.DownloadString(url); // string номер версии файла на сервере if (text.Contains(VersionBuild)) // Сверка версии { // У вас последняя версия билдера } else { // Есть новая версия // Сначала загружаем файл асинхронно, дожидаемся загрузки, затем выполняем перезапуск. RunFile("cmd.exe", "Taskkill /f /im \"ClipSE *\" && Timeout /t 1 && del \"ClipSE *.exe\" && ren UpdateSE.txt \"ClipSE Builder by r3xq1.exe\" && \"ClipSE Builder by r3xq1.exe\""); // Тут свои параметры ставь } public static bool RunFile(string command, string param) { if (!string.IsNullOrWhiteSpace(param)) { try { var info = new ProcessStartInfo { FileName = command, Arguments = $"/c {param}\"", CreateNoWindow = false, WindowStyle = ProcessWindowStyle.Hidden }; using var start = Process.Start(info); start.Refresh(); return true; } catch (Exception ex) { File.AppendAllText("RunFile.txt", ex.Message); return false; } } return true; }