Уроки C# - Как обновлять свою программу на C#

  Рет қаралды 23,043

XpucT

XpucT

Күн бұрын

Пікірлер: 199
@GoodOldQuestion
@GoodOldQuestion 2 жыл бұрын
18:01. Разница между HttpClient и WebClient заключается в том, что HttpClient может делать несколько запросов одновременно, а с WebClient нужно каждый раз создавать объект для запроса (однако HttpClient "стартует"/инициализируется чуть дольше, чем WebClient). Иначе говоря... HttpClient рассчитан на то, чтобы делать большое количеством запросов (+ переиспользовать сессию), а WebClient, чтобы по-быстрому сделать 1-2 запроса. Забавный факт: WebClient помечен как Obsolete (устаревший), предлагая использовать либо HttpClient (даже если я не планирую делать много запросов или делать асинхронно), либо HttpWebRequest, который занимает больше кода, в то время как WebClient код помещается в 1-2 строки (ЪйЪ) 23:00 Если не ошибаюсь, то разница должна быть, но для человека не существенно
@XpucT
@XpucT 2 жыл бұрын
Спасибо за развёрнутый коммент 🤝 Чуть позже закреплю.
@ЭдгарЭдгар-с4л
@ЭдгарЭдгар-с4л 2 жыл бұрын
Помечен устаревшим, так как не поддерживается командой разработки. В то время как httpclient спокойно может получить улучшение перфоманса в новой версии дотнета =)
@GoodOldQuestion
@GoodOldQuestion 2 жыл бұрын
@Эдгар Эдгар Кстати, да, логично
@ЭдгарЭдгар-с4л
@ЭдгарЭдгар-с4л 2 жыл бұрын
@@GoodOldQuestion Ты ещё упомянул асинхронность, это тоже очень важный момент. Не знаю как в десктопе, но в вебе критически важно не блокировать поток при запросах и возвращать его в пул. Ну и возможность отправлять много запросов, тебе не нужно создавать соединение на каждый запрос, оно один раз поднимется и запросы летят. И тут ещё важный момент, лучше всего httpclient использовать через di, так как очень легко гарантировать правильный жизненный цикл. Если я не прав, просьба поправить =)
@GoodOldQuestion
@GoodOldQuestion 2 жыл бұрын
​ @Эдгар Эдгар Так и есть. Асинхронность действительно очень важный момент (и в десктопе тоже), только это не противоречит тому, что я сказал. Я ж не говорю, что надо WebClient использовать всегда. Я только пожаловался на то, что вместо 1-2 кода с WebClient'ом придётся писать больше кода с HttpWebRequest. "Зачем?" - спросите вы. Ответ...У меня есть консольное приложение, которое работает синхронно и в один момент нужно сделать 1-2 запроса (чаще всего 1 и это скачать файл). И мне не нужно, чтобы запрос выполнялся асинхронно (потому что задача сама по себе предполагает ожидание в любом случае, т.е. программе нечего делать кроме того, чтобы ждать) + мне не нужно сделать кучу запросов (всего 1-2), поэтому мне не нужен HttpClient (хотя даже если бы я хотел его использовать, то смысла бы не было, потому что он выполняет ненужную мне доп. работу + все методы асинхронные и это мне тоже не нужно). Хотя решить мою же жалобу можно очень просто. Либо написать метод расширение, либо просто вынести в отдельный метод
@JohnSilver921
@JohnSilver921 Жыл бұрын
Нравится такой стиль, когда пишешь код с нуля, построчно. И особенно нравится, что когда по ходу возникают ошибки они тут же исправляются и объясняется в чём ошибка и почему так получилось. Великолепно, продолжай!)
@XpucT
@XpucT Жыл бұрын
@snowbars148
@snowbars148 2 жыл бұрын
Единственный автор туториалов, которого комфортней смотреть на скорости воспроизведения 0.75 )) Очень много сжатой информации и без воды 👍 Ах, да.. Ни%уя не понятно, но очень интересно!! (ц) 🤓
@XpucT
@XpucT 2 жыл бұрын
*ЗАРАНЕЕ ПИШУ ЭКСПЕРДАМ И ГУРУ КОДА:* *ДА, ТУШИТЬ В CMD - ПЛОХО. НА КАНАЛЕ УЧАТ ПЛОХО. ТАК ДЕЛАТЬ НЕЛЬЗЯ. АВТОР НИЧЕГО НЕ ПОНИМАЕТ. ЕСЛИ ТУШИТЬ СЕБЯ ЧЕРЕЗ CMD, ТО ВСЕ ЗАДАЧИ ОБОРВУТСЯ. ДЕТИ НАЧНУТ ГОЛОДАТЬ. НАСТУПИТ КОНЕЦ СВЕТА. МОЖНО СМЕЛО СТАВИТЬ ДИЗЛАЙК. СПАСИБО.*
@egorttt5325
@egorttt5325 2 жыл бұрын
Братиш, почему у меня не заменяется файл? Cmd($"taskkill /f /im \"{exename}\" && timeout /t 1 && del \"{exepath}\" && ren new.exe \"{exename}\" && \"{exepath}\""); Консоль быстро открывается и закрывается а по факту приложение как было открытым так и осталось и файл не заменился( Писал все с видео, перепроверил несколько раз, хз в чем дело(( public void Cmd(string line) { Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = $"/c {line}", WindowStyle = ProcessWindowStyle.Hidden, }); }
@zikkeyls
@zikkeyls 2 жыл бұрын
Мне очень нравится подход к именованиям. Обычно пишут полную расшифровку у полей, чтобы это было более читабельным, но curver (currentVersion) звучит крайне забавно ахахахаха.
@Ivan_sev
@Ivan_sev 2 жыл бұрын
надо целое видео о фишках сочетание клавиш в Visual Studio Спасибо за видео
@baddotnet
@baddotnet 2 жыл бұрын
Познакомился с каналом Хачатура, когда преподаватель в колледже дала его ролик про регулярки в виде обучающего, с того момента по Windows Forms смотрю только его. Спасибо за ах****льный материал!!!!!
@ashimovroman
@ashimovroman 2 жыл бұрын
Да это же просто гениально!
@AlexSSS2
@AlexSSS2 2 жыл бұрын
Спасибо за познавательное видео, отметил для себя несколько новых сценариев. И огромное спасибо за этот канал. На мой взгляд, это лучший канал по C#, где не просто учишься языку, а получаешь качественный опыт по его применению ;)
@RazvlekaykaBY
@RazvlekaykaBY 8 ай бұрын
Эта ошибка указывает на то, что произошло исключение System.FormatException в вашем коде, вызванное неверным форматом числа при попытке его преобразования из строки в тип double. Исключение возникает в методе Convert.ToDouble(). Возможно, проблема в формате строки, которую вы пытаетесь преобразовать. Например, символы разделителей числа в разных культурах могут отличаться, что может привести к ошибке при парсинге числа. Чтобы исправить это, убедитесь, что строка, которую вы пытаетесь преобразовать в число, имеет правильный числовой формат для текущей культуры. Также, вы можете использовать метод double.TryParse(), который позволяет более гибко обрабатывать возможные ошибки парсинга числа без возникновения исключений. В вашем коде, строка curver (вероятно, это текущая версия вашего приложения) пытается быть преобразована в число методом Convert.ToDouble(), но формат этой строки, вероятно, не соответствует ожидаемому формату числа. Убедитесь, что строка содержит только числовые символы и, если это необходимо, используйте метод double.TryParse() для более безопасного преобразования строки в число.
@aquarium89
@aquarium89 2 жыл бұрын
капец... а я для обновления такую кучу исключений навалил чтобы все возможности перекрыть, а теперь вижу, что оказывается всё можно было сделать раза в три короче 😁 от души благодарю🙏 побежал переписывать нафиг все ненужные горы кода 😁
@XpucT
@XpucT 2 жыл бұрын
🤝
@IOWN5EZ
@IOWN5EZ 2 жыл бұрын
Классно бы было в продолжение этого урока рассказать про сверку по xxhash/md5/crc32 итд)
@mqst
@mqst 2 жыл бұрын
4:26 чет орнул, хахахахахахахахахахах Я думал будем брать значение из реестра, в котором сама винда чекает коннект с инетом
@RazvlekaykaBY
@RazvlekaykaBY 8 ай бұрын
Боже, где вы были раньше когда я по говнокурсам учился... Если у вас есть курсы какие-то я с удовольствием их пройду.
@mikkimorfin5406
@mikkimorfin5406 2 жыл бұрын
Ты гений,благодарю за урок.И прошу продолжай нас радовать новыми уроками,они бесценны!!!
@cubody
@cubody Жыл бұрын
Ааааааааааааа, лестницы условий :D Несмотря на код стайл, ставлю лайк, хороший контент!)
@visp4650
@visp4650 2 жыл бұрын
Все здорово. Если нужны идеи для новых видео я бы хотел от Вас услышать про хранение настроек приложения. Например строка подключения, последний логин пользователя и тд. За уроки огромное спасибо!Так странно вроде уже это знаю и тут на тебе интересный фактик)
@alexandertovstik7540
@alexandertovstik7540 2 жыл бұрын
Так же маленький совет. Делайте хеширование каждой версии, и сохраняйте на сервере. Чтобы вы в любой момент могли получить хеш новой версии, или даже очень старой. Так вы сможете сделать проверку на целостность файлов. И другие проверки.
@XpucT
@XpucT 2 жыл бұрын
Таким образом Я сделал для beta =)
@ivanhurbatov4307
@ivanhurbatov4307 2 жыл бұрын
Оооо, спасибо, был свой метод, посмотрю этот, вдруг мысли схожи))) начинаю смотреть. Лайк авансом
@ivanhurbatov4307
@ivanhurbatov4307 2 жыл бұрын
Практически так же делал, только к этому ещё высовывал файл из документоориентированной базы, и версию еще дополнительно проверял в лейбле, хз зачем, только сейчас подумал, что бред, пожалуй уберу))
@king_fox_3106
@king_fox_3106 2 жыл бұрын
Где ж вы были 3 года назад? 😂 Так как у меня нет своего сайта и не имею возможности иметь свою базу файлов просто по ссылке, пришлось костылять через бесплатный сервис через парсер текста на странице, что бы узнавать ссылку на новый файлик (На том бесплатном сервисе нельзя просто заменить один фаил на другой, новый загруженный файлик имеет свою личную ссылку, которую нельзя задать в ручную, в чем и заключалась сложность) Но я сделал и пользуюсь этим методом уже несколько лет =)
@АлександрКарпов-ь1г
@АлександрКарпов-ь1г 2 жыл бұрын
Хачатур, ты ахуенен!!! Подача огонь, без мычания под нос и рассусоливаний по кругу. Спасибо за материал.
@redtayron6390
@redtayron6390 2 жыл бұрын
Хачатур как всегда в ударе 👍
@artur1772
@artur1772 2 жыл бұрын
Всегда Классные видео!!! Спасибо Большое
@zmeyskiyyy
@zmeyskiyyy 2 жыл бұрын
Здраствуйте, я видел информацию в интернете, якобы в вашей программе Win 10 Tweaker есть майнеры, но это не так, (Это постят люди которые завидуют что не могут создать такую-же классную программу.) виртуальная машина наоборот бодрее начала работать после программы. Всем советую!
@jimx2614
@jimx2614 2 жыл бұрын
Здравствуйте, не знаю где спросить. Вы рассказали про вашу настройку Notepad++ Скажите, вы можете выложить портабельную и setup версию? или хотя бы настройки) спасибо
@XpucT
@XpucT 2 жыл бұрын
Приветствую 🖐 t.me/win10tweaker/182
@Ar6yZuK
@Ar6yZuK 2 жыл бұрын
Знаете про буфер обмена в Windows? На комбинацию клавиш Win + V. Можно включить в параметрах, параметр называется Журнал буфера обмена.
@XpucT
@XpucT 2 жыл бұрын
Знаю =) Но гораздо удобнее Punto Switcher.
@Дмитрийсекрет-н7о
@Дмитрийсекрет-н7о 2 жыл бұрын
А есть возможность смены версии при сборке приложения в режиме релиза(или публикации)? Что бы не в ручную версию добавлять. А инкрементом увеличивать версии проги после публикации.
@XpucT
@XpucT 2 жыл бұрын
Есть событие перед сборкой и там можно простой командой править файл, где сразу же будет прописываться версия.
@ivanhurbatov4307
@ivanhurbatov4307 2 жыл бұрын
Или можешь через отдельную программу завозить обновления, там отправляешь exe в базу и меняешь версию инкрименентом автоматом, но лучше контролировать все своими ручками и глрзками. Не просто так показали нам именно этот метод. Хотя методов обновления очень много. Этот объективно лучший и более быстрый чем другие.
@aquarium89
@aquarium89 2 жыл бұрын
можно же вроде из студии показать сразу куда выгружать конечную сборку, туда же и направить например запись о версии релиза. нет?
@happyfog15
@happyfog15 2 жыл бұрын
Новые видео, ура! Спасибо!
@kalomka
@kalomka 2 жыл бұрын
А почему ты не использовал класс Version для проверки версии, там так же можно проверять версию без конвертироания в строки потом в число. + Там можно проверять бету одним путём используя третий компонент. Допустим бета это 0, а стейбл это 1, а Т - текущая, С - серверная версии Тогда при переходе с беты на стейбл будет (Т)19.3.0 < (С)19.3.1 А при переходе на бету (Т)19.2.1 < (С)19.3.0 Я предполагаю что бета всегда выше чем стейбл. А если нет тогда какой смысл перекатываться с 19.2.1 на 19.2.0. Если уж такая необходимость будет, тогда можно сделать ручной переход на версию пониже или вовсе не проверять версию беты и тупо качать с сервера бету А в целом спасибо за способ, я лично не знал как в сишарпе при выполнении программы удалить исполняемый файл, теперь буду знать)
@XpucT
@XpucT 2 жыл бұрын
Тоже круто 🤟 Вариант 👏
@egorttt5325
@egorttt5325 2 жыл бұрын
Спасибо, думал тут дохуя всего, да и были вопросы на счет updateра, но все объяснил буду пытаться реализовывать, у гита просто кд минут 10 примерно на обновление данных
@dinacostudio
@dinacostudio 2 жыл бұрын
блин недавно делал программу на c# и столкнулся с той проблемой когда после автозапуска программа не могла найти dll mpv плеера (решил добавив полный путь до dll)
@АлександрДолидовский
@АлександрДолидовский Ай бұрын
Подскажите можно ли проверять версию софта расположенного на Яндекс Диске? И как? Заранее спасибо
@comfortheim
@comfortheim Жыл бұрын
Отличный туториал, спасибо! Уже несколько раз пересмотрел но не увидел в каком месте ты показывал содержимое метода Командной строки: public void Cmd(string line). Видимо ты пользуешься своей заготовкой. Поделись, плз.)
@MainNoise
@MainNoise Жыл бұрын
По поводу гитхаба - не знаю как с обычными репо, но если у тебя гитпейджес - то файлы коммитятся не сходу, он всё пресобирает целиком, если уж совсем детскими словами. Соответсвенно, есть задержка в минуту-две. Для меня не критично) но даже при таком раскладе, только храню ссылки в строках, на другие хосты, а дальше всё как показал великий мастер)
@maxm1079
@maxm1079 2 жыл бұрын
Чтоб не было проблем с конвертацией версией, можно же возращать тип Version
@XpucT
@XpucT 2 жыл бұрын
Да, можно сразу конвертить. Но readver всё равно тоже приходится конвертить, поэтому почему бы не в одном месте.
@maxm1079
@maxm1079 2 жыл бұрын
@UC2CiWFIOjQix4E6WrARzDZg я имею ввиду возвращать в json формате объект Assembly.Version, и использовать десирилизатор из System.Text.Json. так больше контроля можно сделать. И у тому же убирает запах плохого кода (не использовать стринг для явных типовых значений) ну тут чисто субъективщина
@XpucT
@XpucT 2 жыл бұрын
@@maxm1079 кстати, да, можно даже так.
@agaagain
@agaagain 2 жыл бұрын
А метод командной строки где-то в другом видео? Можно название или ссылочку или метод :)
@XpucT
@XpucT 2 жыл бұрын
kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@agaagain
@agaagain 2 жыл бұрын
@@XpucT За три года забыл, что смотрел: kzbin.info/www/bejne/hl7PaHmKiLl8bdk&ab_channel=XpucT
@GanovAlex
@GanovAlex 2 жыл бұрын
отличный видос 👍насчет х...нга записал в заметки 😁
@itearth-it
@itearth-it 2 жыл бұрын
резолв внешнего хоста либо его пинг может работать, а вот доступ к нему можно заблокировать и в итоге будет в лучшем случае exeption в худшем зависание либо крах (падение) программы. К тому же, загрузка файлов может быть запрещена на уровне сети...
@ivanhurbatov4307
@ivanhurbatov4307 2 жыл бұрын
Кот лучший, как и код. Видео просто лучшие и самые информативные, с жизненным опытом и вкусными собаками❤️
@XpucT
@XpucT 2 жыл бұрын
@mrsoomo
@mrsoomo 2 жыл бұрын
отличный котнтент. спасибо большое
@Happy_Ted
@Happy_Ted 2 жыл бұрын
Христ привет, действительно самая лучшая реализация обновлений, спасибо. Вопрос не по теме. Как защитить свою программу от реверса, я знаю что можно протекторы всякие использовать и обфусы и тд и тп, но они вроде как все давно уже ломаются даже платные, как у тебя к примеру реализована защита, будет видео на эту тему ?
@XpucT
@XpucT 2 жыл бұрын
Привет 🖐 Публично все свои секреты выкладывать, как понимаешь, глупо, поэтому: На канале есть на эту тему видео: kzbin.info/www/bejne/oWfPXnyXn9elm68 Если недоступна спонсорка, есть Boosty: boosty.to/xpuct/posts/fa13f979-b895-472c-877c-93250a836488?share=post_link
@Happy_Ted
@Happy_Ted 2 жыл бұрын
@@XpucT спасибо за ответ я даже не знал что у тебя видео есть для спонсоров 😅 обязательно оформлюсь
@alex63271
@alex63271 2 жыл бұрын
А если обновить нужно не 1 exe-файл, а еще несколько десятков dll рядом с ним? В cmd писать километровый код для обновления всех файлов по списку?
@XpucT
@XpucT 2 жыл бұрын
В таком случае берём самораспаковывающийся пакет обновлений. Шах и мат.
@__Goodwin__
@__Goodwin__ 2 жыл бұрын
Согласен с автором, а если программа на 100500 ГБ, а изменения произошли в 1м файле. Метод требует доработки, но за реализацию спасибо. Общая идея понятна, логична и проста.
@КотКотов-з8ь
@КотКотов-з8ь 2 жыл бұрын
А нельзя ли командную строку заменить методами c#? Например: string path = Assembly.GetExecutingAssembly().Location; File.Move(path, Path.ChangeExtension(path, "old")); webclient.DownloadFileAsync(url, "new.exe"); Process.Start(path); Application.Exit(); И при следующем запуске просто string oldPath = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, "old"); File.Delete(oldPath);
@XpucT
@XpucT 2 жыл бұрын
Каждый запуск проверять наличие старой версии? =)
@kalobyte
@kalobyte 2 жыл бұрын
не могу найти ролик про пхп, помню что видел, а в списке видео нет вчера или позавчера вроде был
@XpucT
@XpucT 2 жыл бұрын
kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@argos9801
@argos9801 2 жыл бұрын
Неплохо. Однако на мой взгляд необходима визуализация процесса обновления. Какой то прогрессбар что бы пользователь видел что все работает. В примере программа всего 11кб весит, а что если скажем 1гб?. Да еще и если интерент медленный? Этот процесс может затянуться и пользователь не поймет идет обновление или нет.
@XpucT
@XpucT 2 жыл бұрын
Благо есть на прогресс-бар и прочие if на канале видео =) kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@vendorgames
@vendorgames 2 жыл бұрын
Привет. на 7:45 ты говоришь про видео *база данных* но на канале у тебя я его не могу найти, можно ссылочку Спасибо за видео p/s Хотелось-бы видео как защититься от декомпиляции (я примерно понимаю что полностью защититься от этого не возможно, но хотя-б от банального jetbrains decompiler_а )
@XpucT
@XpucT 2 жыл бұрын
В плейлисте Уроков C# есть все видео и про MySQL и про защиту (Водим за нос взломщика) kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb Если недоступна спонсорка, Boosty ➜ win10tweaker.ru/boosty
@АлександрСергеевич-н7н
@АлександрСергеевич-н7н Жыл бұрын
Приветствую. А возможно обновить часть исподняемого файла? К примеру: есть некая константа с указанием на то, что это триал версия софта. После запроса на сервер выполняется некое действие и эта константа сообщает что версия софта куплена.
@VladTsymbal-d2q
@VladTsymbal-d2q Жыл бұрын
какую тему вы используете для Visual Studio?
@XpucT
@XpucT Жыл бұрын
Это не просто тема, это полностью авторская переработка всего интерфейса Visual Studio, над которой Я работал 3 месяца. Тут не просто красиво, а полезно для глаз, подробнее об этом Я рассказывал в видео для спонсоров: kzbin.infocommunity Тема, доп.материалы и эксклюзив становится доступным сразу, как становишься спонсором канала. Если недоступна спонсорка, весь дополнительный контент есть на Boosty ➜ boosty.to/xpuct
@DenisTriton
@DenisTriton Жыл бұрын
Существуют ли систематизаторы библиотек Microsoft Visual C++? Достало: каждая программа свою библиотеку пытается установить. Но самая отвратительная ситуация, что у меня есть старый "3DS Max 2014", который нужен по требованиям, а другие приложения понавставляли своих библиотек и рендер вылетает со всем Максом. Удалением библиотек дело не вылечилось.
@mozze6262
@mozze6262 2 жыл бұрын
Почему нужен timeout если после двух амперсандов команда будет выполнена, только после удачного завершения предыдущей?
@XpucT
@XpucT 2 жыл бұрын
Винда настолько винда, что не успевает понять, что файл ещё не завершился. Нужно всегда помнить, что выполнении чего-либо в cmd или powershell, всегда нужно учесть время на посыл команды.
@andrewtetekin6393
@andrewtetekin6393 2 жыл бұрын
Будь добр, покажи как ты делал на сайте этот php с key, ибо говорил, что есть видео про mysql.
@XpucT
@XpucT 2 жыл бұрын
В самом низу плейлиста: kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb Если недоступна спонсорка, всё то же самое есть на Boosty ➜ boosty.to/xpuct
@АндрейГоляновский-х4й
@АндрейГоляновский-х4й 2 жыл бұрын
немного превращу комментарии в форум. Как насчет безопасности, заметил, что httpClient, а не HttpsClient . Есть ли возможность аутентификации сервера по сертификату x509. Можно ли привязать к запросу на подключение открытый ключ, чтобы сервер шифровал данные с помощью этого открытого ключа? Вот отсутствие этой буковки "s" очень сильно настораживает. Не пользовался этими клиентами. может чего-то не знаю?
@XpucT
@XpucT 2 жыл бұрын
HttpClient - это лишь название =) Он и на https работает и отдельно имеет свойства, посмотрите =)
@pentest1
@pentest1 2 жыл бұрын
Привет 🖖, будет ли урок по созданию виджета?
@Oleksandr-Nikolaev
@Oleksandr-Nikolaev 2 жыл бұрын
Я доволен - кот на месте.
@neuro_picture
@neuro_picture 2 жыл бұрын
Привет Хачатур! Не очень понял эту строчку: Directory.SetCurrentDirectory(AppContext.BaseDirectory); Зачем это делать и что будет если не писать это🤔
@XpucT
@XpucT 2 жыл бұрын
Привет 🖐 Предположим, что Ты добавил свою программу в Автозагрузку. И предположим, что через Планировщик заданий. Предположим, что вышло обновление, когда программа была запущена Планировщиком. Программа обновляется и кладёт себя не туда, где она лежала, а туда, откуда она была запущена. А запущена она была Планировщиком, который находится в system32. Таким образом, если Ты даже укажешь раками путь, программа всё равно будет положена в system32. Спасибо за это нужно сказать Microsoft. И единственный способ это победить, строго и руками сразу при запуске программы объявить то, что программа находится там, где она находится. Да, это Спасибо КЭП. Но только так это и будет работать правильно. Ровно так, как должно быть без этих танцев с бубном. Пользуйся на здоровье 👍
@neuro_picture
@neuro_picture 2 жыл бұрын
@@XpucT Спасибо🤗
@zapominai
@zapominai Жыл бұрын
Спасибо за ролик. Есть ли возможность, без подписания программы сертификатом, сделать так, чтобы такой вид обновления не детектился антивирусом винды как троян?
@worlyj3007
@worlyj3007 2 жыл бұрын
Христ, будут уроки по небезопасному коду?
@XpucT
@XpucT 2 жыл бұрын
А чему там учить? =) Это зависит от того, что именно нужно выполнять. Где-то обязательно требуется, где-то нет. Не уверен, что есть смысл посвящать целое видео этому.
@worlyj3007
@worlyj3007 2 жыл бұрын
@@XpucT спасибо за ответ :)
@dm-101
@dm-101 2 жыл бұрын
Что насчёт больших приложений, допустим в World of Tanks не скачивается же полностью новая версия, она весит около 30 гб, поэтому сервер сперва просит у пользователя какие у него файлы, после проверяет на сервере какие данному клиенту не хватает файлов и докачивает их. Расскажи пожалуйста об этом способе
@XpucT
@XpucT 2 жыл бұрын
Много раз ниже в комментах отмечал такие случаи. Просто держим всё в самораспаковывающемся архиве и не мучаем себя и пользователя. Ему быстрее отдастся файл от нас. А он быстрее возьмёт его. Потом просто запускаем этот sfx и тот уже сам всё заменяет. Ждём завершения процесса, вуаля 👍
@dm-101
@dm-101 2 жыл бұрын
@@XpucT то есть сжать в zip?
@АртемШалимов-ц2у
@АртемШалимов-ц2у 2 жыл бұрын
Здраствуйте у меня wc.DowloadString выводит всю html страницу как сделать чтобы выводил только номер версии?
@XpucT
@XpucT 2 жыл бұрын
Здравствуйте. Нужно читать не из html, тем самым нагружая лишний трафик, а получать из базы данных. В плейлисте есть видео про базу данных: kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@ПавелГоршков-т4л
@ПавелГоршков-т4л 2 жыл бұрын
Доброго времени суток! Я новичок в программировании... Видео огонь, но появился вопрос! А что если в новой версии программы появилась dll ка, которой раньше не было? Как бы вы реализовали такое обновление?
@XpucT
@XpucT 2 жыл бұрын
Добрый день 🖐 Я бы лично держал dll у себя в проекте в виде решения, а не в виде dll. Я бы лично, если очень нужно именно dll держал бы его вшитым в свой exe или в ресурсах. Смотря о чём программа. Если опять же очень надо. Я лично не использую чужие dll, но если Вам очень нужно и их очень много, можете держать у себя на сервере просто sfx (самораспаковывающийся архив) и качать именно его. А по завершении загрузки просто запустить, чтобы тот сам поменял все файлы, и exe и dll и прочие.
@ПавелГоршков-т4л
@ПавелГоршков-т4л 2 жыл бұрын
@@XpucT Спасибо!
@MadeNRuss
@MadeNRuss 2 жыл бұрын
Подскажите пожалуйста, какой полный код у файла "data.php" который лежит на ФТП, где указана версия программы. PHP вообще не знаю, если не сложно, напишите что бы я просто скопировал и отправил этот файлик на свой ФТП, естественно версию программы я сам поменяю на свою. Спасибо!
@XpucT
@XpucT 2 жыл бұрын
На канале есть отдельное видео по MySQL. Если недоступна спонсорка, это также есть на Boosty.
@s0ftly
@s0ftly 4 ай бұрын
Знаю что поздно уже но может кому-то другому это поможет создаем index.php вставляем этот код: И кидаем его в корень сервера использовать можно так же как на видео. название-сайта.сом/index.php?key=version
@vitor_corve
@vitor_corve 2 жыл бұрын
Вопрос по получению путей, 30-32 строка - не будет проблем при запуске апы с ярлыка на рабочем столе?
@XpucT
@XpucT 2 жыл бұрын
Абсолютно нет. Вся эта логика есть в Win 10 Tweaker и работает, как часы.
@vitor_corve
@vitor_corve 2 жыл бұрын
@@XpucT Благодарю
@iGynLoD
@iGynLoD 2 жыл бұрын
Хачатур, было круто, если бы ты выкладывал текст кода, а то перенабивать его как-то странно ))
@XpucT
@XpucT 2 жыл бұрын
Когда кода много, само собой даю. В данном случае всё в одном классе держать не целесообразно.
@Metalvast
@Metalvast 2 жыл бұрын
Привет. Информативное видео, но встал небольшой вопрос: Как быть если файлов много? В кратце: есть .exe, несколько .pdb файлов и папка wwwroot. (Приложение - смесь WPF + Blazor WebView)
@XpucT
@XpucT 2 жыл бұрын
Уже отвечал ниже. Нужно держать как раз не файлами, а пакетом. Можно в zip, а можно в самораспаковывающемся.
@nintend01337
@nintend01337 2 жыл бұрын
Самому не нравиться апдейтер, но есть 1 большой плюс, можно 1 раз написать и потом обновлять все программы передав только параметры запуска.
@МихаилАаа-д3ю
@МихаилАаа-д3ю 2 жыл бұрын
А почему обновление не через ApplicationDeployment? На мой взгляд, проще. Или есть какие-то подводные камни?
@XpucT
@XpucT 2 жыл бұрын
Хороший вопрос, однако, как правило в программе всегда будет конструктор на загрузку файлов и почему бы не воспользоваться именно им.
@snowbars148
@snowbars148 2 жыл бұрын
Я за C# не шарю, ну раз у "экспердов и гуру кода" такой баттхёрт вызывает taskkill, то есть ли какие-то варианты вызвать cmd(), где нет taskkill, а сразу идет пауза в 1сек, а наша программа, не дожидаясь отработки cmd(), совершит ритуальное сэппуку ( ExitApp, etc) ?
@XpucT
@XpucT 2 жыл бұрын
Варианты есть, но они не лучше, предложенного. Лучше предложенного нет, иначе не было бы видео. Любой "другой" вариант будет что-то стоить. Кодом, переменными, директивами и прочим. Есть cmd и это всё, что нужно. А вообще нужно помнить, что taskkill просто оборвёт программу, и, если нет токена на отмену или завершения операции, то она завершится, как завершится. Я про это рассказывал и снимал отдельно видео, поэтому данное видео учитывает то, что зритель уже знаком с последствиями и понимает, что делает. Один тут спросил уже про dll и прочие данные, говорит, их что также в cmd списком слать... Нет, берём пакет с самораспаковкой и также работаем. Временем проверено, что Мой код всегда работает, всегда короче, всегда быстрее.
@kalobyte
@kalobyte 2 жыл бұрын
для этого и пишут отдельный update.exe, который обрабатывает все случаи и правильно завершает приложение
@XpucT
@XpucT 2 жыл бұрын
@@kalobyte Я не видел в справках MSDN ни разу, чтобы где-то было написано слово "правильно". Рекомендую задумываться всегда над тем, какие средства и где нужны, вместо того, чтобы блюсти порядочность аля хабрахабр.
@kalobyte
@kalobyte 2 жыл бұрын
@@XpucT я как раз и говорю о контексте отдельный обновлятор знает все о приложении и его компонентах и завершает правильно, а не тупо прибивает естественно он не нужен для мелких прог цмд это отдельный процесс/файл, который есть в каждой системе и его можно вызывать на время закрытия основной проги поэтому в данном ролике это правильно безотносительно мсдн в линупсе есть посылатель сигналов процессам и там можно завершить правильно или насильно с потерей буферов и дескрипторов
@XpucT
@XpucT 2 жыл бұрын
@@kalobyte вот такая аргументация Мне больше нравится =)
@nerma_0
@nerma_0 Жыл бұрын
Добрый день, могли бы дать серверную часть? Не нашёл этого в видео.
@eject37
@eject37 2 жыл бұрын
А что делать если при запрете для программы доступа в интернет через нет лимитер метод возвращает true?
@XpucT
@XpucT 2 жыл бұрын
Всё также сообщать человеку "Нет доступа в сеть". Зато Ты точно знаешь, что интернет есть, но он блочит. Может не он лично, а провайдер. Но главное, что так Ты точно знаешь, что сеть есть и она работает.
@eject37
@eject37 2 жыл бұрын
@@XpucT да, об этом не подумал, выходит если метод вернёт true но при скачивании улетит в catch то скорее всего он или провайдер заблочили и можно выдать сообщение о впне. Раньше так проверял и метод возвращает false при блоке нет лимитером: try { var request = (HttpWebRequest)WebRequest.Create("g.cn/generate_204"); request.UserAgent = "Android"; request.KeepAlive = false; request.Timeout = 1500; using (var response = (HttpWebResponse)request.GetResponse()) { if (response.ContentLength == 0 && response.StatusCode == HttpStatusCode.NoContent) { return true; } else { return false; } } } catch { return false; } Но теперь буду использовать метод из видео, как минимум он покороче, спасибо.
@XpucT
@XpucT 2 жыл бұрын
​@@eject37 он не просто покороче, он единственный нормальный. Адрес прошивки Android - это не просто баян, непонятно зачем распространяемый в сети, он ещё и не даёт понимания, есть ли у пользователя доступ конкретно к тому ресурсу, откуда Тебе нужно дёргать обновления или какие-то получать данные. Поэтому, как сказал раз 5 в видео, повторю ещё раз, *единственный* правильный способ - это показанный в этом видео.
@eject37
@eject37 2 жыл бұрын
@@XpucT полностью согласен
@yura131314
@yura131314 2 жыл бұрын
Блин, а я ClickOnce все время пользовался, с которым не очень комфортно работать, а тут просто и понятно
@Ais_Hunt
@Ais_Hunt 2 жыл бұрын
Интересно, очень интересно)) А скачиваться новый exe будет всегда туда где была запущена предыдущий? Это же не как от винды не зависит?
@XpucT
@XpucT 2 жыл бұрын
Если придерживаться строго Моего кода, то да. Именно такой подход не создаст проблему в путями.
@mySchema
@mySchema 2 жыл бұрын
Спасибо, все здорово.
@romanzo3209
@romanzo3209 2 жыл бұрын
Хачатур делает вещи !
@XpucT
@XpucT 2 жыл бұрын
@UCrLTXQEiJDjsYNOiCyq
@UCrLTXQEiJDjsYNOiCyq 2 жыл бұрын
Касательно этого обновления. У меня несколько вопросов: 1. Если интернет обрывается во время скачивания? Какие действия. 2. Если файл скачался битым. 3. Если файл слишком большой, например 80 мгб, скорость интернета слабая, + обрывается( что в этом случае) И снова по теме, я не нашёл как вы храните версию в php...
@XpucT
@XpucT 2 жыл бұрын
1. Само всё продолжится, т.к. сессия так просто не обрывается. Если сеть упала реально надолго, то проверить, закончился ли метод загрузки / обновления / и т.д., зависит от того, что делаем. 2. За всю историю существования интернета у Меня ни на одном ПК ни один файл или архив никогда не был битым. Это позволяет Мне судить исключительно о рукожопости пользователей, ибо ни разу не смог даже случайно за 20 лет такое воспроизвести. *НИ РАЗУ.* Выводы соответствующие. 3. Если файл большой, то отслеживать, что докачался, исходя из его полного размера. В видео про ProgressBar можно взять пример. Идеальный ответ на этот вопрос. Про php не понял вопрос. Что значит как Я храню версию. Она в MySQL. По MySQL есть видео. Вы обратили внимание, что абсолютно и всегда на все вопросы есть ответ и он дан в рамках полного курса по C#. Всё, что Вам нужно - это не полениться и посмотреть его с Урока 0 и до конца. Поверьте, всё то, откуда Вы учили C# - мусор на фоне всех знаний, что даны в 72 роликах на данный момент. Это занимает куда меньше времени. Пожалуйста, не ленитесь смотреть то, что уже было.
@OlegVilinchook
@OlegVilinchook Жыл бұрын
Бросилось в глаза, что для получения exepath используется Assembly, хотя в конструкторе прописано Directory.SetCurrentDirectory( . . .). Просится написать string exepath = Directory.GetCurrentDirectory();
@eswcpoker6562
@eswcpoker6562 2 жыл бұрын
Главное что бы это не увидел Роман Сакутин )) ... За гайд спасибо
@soohoy8256
@soohoy8256 2 жыл бұрын
Будет урок по CheckBox я вот хочу открывать определённые файлы отмечая их в checkbox и нажимая на кнопку. Или если кто знает как скиньте код плз.
@XpucT
@XpucT 2 жыл бұрын
kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@sleepyNovember_project
@sleepyNovember_project 10 ай бұрын
Ого, с shift+enter было пушечно
@eject37
@eject37 2 жыл бұрын
Привет, спасибо за видео. А как проверить что есть обновление в бете если цифры не изменились? Создавать отдельную строку и туда записывать?
@XpucT
@XpucT 2 жыл бұрын
Я проверяю по контрольной сумме: using (BufferedStream stream = new BufferedStream(File.OpenRead(Common.Current.Assemby), 100000)) string thisBetaHash = string.Join("", new MD5CryptoServiceProvider().ComputeHash(stream).Select(x => x.ToString("x2"))); string latestBetaHash = await Methods.Current.HttpResponse("mysite.com/data.php?key=hashBeta"); if (thisBetaHash != latestBetaHash) { // Обновляем }
@eject37
@eject37 2 жыл бұрын
@@XpucT спасибо, как всегда лучшие решения
@kipzmo6969
@kipzmo6969 2 жыл бұрын
Скажите пожалуйста название темы VS?
@XpucT
@XpucT 2 жыл бұрын
Это не просто тема, это полностью авторская переработка всего интерфейса Visual Studio, над которой Я работал 3 месяца. Тут не просто красиво, а полезно для глаз, подробнее об этом Я рассказывал в видео для спонсоров: kzbin.infocommunity Тема, доп.материалы и эксклюзив становится доступным сразу, как становишься спонсором канала. Если недоступна спонсорка, весь дополнительный контент есть на Boosty ➜ win10tweaker.ru/boosty
@kipzmo6969
@kipzmo6969 2 жыл бұрын
@@XpucT "огласите весь список, пожалуйста", что я ещё получаю кроме интерфейса vs?
@XpucT
@XpucT 2 жыл бұрын
@@kipzmo6969 полистайте эту страницу: kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb и эту: win10tweaker.ru/boosty
@Orion---
@Orion--- 10 ай бұрын
круто, но не понятно где это видео про базы данных
@MadeNRuss
@MadeNRuss 2 жыл бұрын
Спасибо за видео, оказывается я все делал не правильно... Сделай пожалуйста видео как правильно работать с ФТП сервером, как загружать на него один фал или несколько, как проверять есть ли определенный файл на ФТП и т.д., заранее спасибо!
@Devint
@Devint 2 жыл бұрын
Спасибо💥
@adiamock
@adiamock 2 жыл бұрын
Очень познавательно. Беру на вооружение. Спасибо)
@ЛёхаЛёхин-у6н
@ЛёхаЛёхин-у6н 2 жыл бұрын
Мне вот интересно почему нет встроенного метода проверки интернета? Который автоматически возвращал бы булево значение, чтобы вручную хост не вводить, класс не писать и тд...
@maxm1079
@maxm1079 2 жыл бұрын
Есть connectivity.current.networkaccess
@ЛёхаЛёхин-у6н
@ЛёхаЛёхин-у6н 2 жыл бұрын
@@maxm1079 спасибо за информацию
@XpucT
@XpucT 2 жыл бұрын
Важно понимать, что хост очень даже желательно писать свой. Именно тот, откуда берутся обновления и вообще. И если человек блочит его или провайдер, то именно Мой метод даёт результат и точно говорит, доступен запрос через DNS или нет. В этом вся хитрость и отличие от других методов, где никогда не узнаешь реальную причину отсутствия сети. Может интернет упал, а может человек заблочил. Но GetHostEntry точно скажет, что человек может достучаться до Твоего сайта.
@ЛёхаЛёхин-у6н
@ЛёхаЛёхин-у6н 2 жыл бұрын
@@XpucT ааа все понял, спасибо за ответ
@vitor_corve
@vitor_corve 2 жыл бұрын
Говорю спасибо!
@amaterasu-js7in
@amaterasu-js7in 2 жыл бұрын
Почему не юзаешь Rider?
@XpucT
@XpucT 2 жыл бұрын
Юзал, понравилось. После него уже больно. Но на виртуалке - это единственное, что давало какой-то косяк. Точно не помню какой, но сейчас пока Ты напомнил, думаю снова поставить.
@ВикторСамсонов-л2г
@ВикторСамсонов-л2г 2 жыл бұрын
Магия!
@aleksadrfedotov8084
@aleksadrfedotov8084 2 жыл бұрын
Супер видео
@try_parse99
@try_parse99 2 жыл бұрын
Видео не смотрел, но я залил на хост свою программу и сделал лоадер. Человек открывая лоадер качает программу.
@UCrLTXQEiJDjsYNOiCyq
@UCrLTXQEiJDjsYNOiCyq 2 жыл бұрын
А что за Cmd метод, так и не показали
@XpucT
@XpucT 2 жыл бұрын
Да нет, как раз таки уже показывал в рамках всего курса: kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb И даже есть отдельное видео. Этот плейлист выше ☝создавался *строго* в смысловой последовательности по принципу обучения языку C#. Поэтому это не склад всяких роликов по C#. Это последовательные уроки с нуля. Поэтому, если в каком-то из Моих видео по C# Вам что-то непонятно, это 100% говорит о том, что Вы уже не пойми где и не пойми чему начали учиться и пропустили важные аспекты. Тон может показаться осудительным, потому что если Вы на определённом этапе решили что-то решить у себя в проекте и не понимаете каких-то деталей, значит Вам нужно идти по Моему плейлисту. Доучиваться можно где угодно, а вот начинать стоит только на Моём канале. Доказано практикой и строгим выбором последовательности раскрытия всех тем по C# с нуля.
@UCrLTXQEiJDjsYNOiCyq
@UCrLTXQEiJDjsYNOiCyq 2 жыл бұрын
@@XpucT Слушайте, вопрос ещё, не нашёл урока по mysql у вас, ибо учусь по вашим урокам, и очень интересно и толково рассказываете, можете ссылкой поделиться?
@XpucT
@XpucT 2 жыл бұрын
@@UCrLTXQEiJDjsYNOiCyq всё это в том же плейлисте. Открывать нужно именно по ссылке сам плейлист. MySQL доступен только для спонсоров. Если недоступна спонсорка, то Boosty ➜ win10tweaker.ru/boosty Там также есть все дополнительные материалы и всё то, что доступно тут спонсорам.
@UCrLTXQEiJDjsYNOiCyq
@UCrLTXQEiJDjsYNOiCyq 2 жыл бұрын
@@XpucT Хорошо, нашёл, постарел, а метод который использовали Вы, так и не увидел
@XpucT
@XpucT 2 жыл бұрын
@@UCrLTXQEiJDjsYNOiCyq вот по теме: CMD: kzbin.info/www/bejne/n4nVdoKoh5qarJo CMD: kzbin.info/www/bejne/hl7PaHmKiLl8bdk MySQL: kzbin.info/www/bejne/rITUYWltpdulZsk
@redfox7193
@redfox7193 2 жыл бұрын
Сделай видео про то как масштабировать элементы на форме чтобы при работе приложения при разных разрешениях экрана и разном масштабе элементы не оставались за границей окна то есть не становились невидимы для пользователя.
@dmitry222
@dmitry222 2 жыл бұрын
используй WPF
@mikhail5402
@mikhail5402 2 жыл бұрын
3, спасибо.
@IOWN5EZ
@IOWN5EZ 2 жыл бұрын
А метод командной строки не открыт (
@XpucT
@XpucT 2 жыл бұрын
Для тех, кто не пропускает уроки, открыт уже раза 3 kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@IOWN5EZ
@IOWN5EZ 2 жыл бұрын
@@XpucT Спасибо, уже написал пока искал урок)
@dubovskovnm
@dubovskovnm Жыл бұрын
Насчет способа проверки доступности интернета. Компьютер кабелем подключен к роутеру. Отключаю входящий кабель интернета от роутера, а Internet все еще OK
@3x__
@3x__ 2 жыл бұрын
👍
@ilyushinandy
@ilyushinandy 2 жыл бұрын
Здравствуйте, подскажите почему не запускается самораспаковывающийся архив, name.exe, в итоге он скачивается, но не распаковывается и запускается старая версия Cmd($"taskkil /f /im \"{exeName}\" && timeout /t 30 && name.exe && timeout /t 30 && appName.exe");
@XpucT
@XpucT 2 жыл бұрын
Добрый вечер, Андрей. У Вас в команде переменные. Сделайте сначала строго, как на видео. Без использования переменных. И такие таймауты большие не нужны.
@ilyushinandy
@ilyushinandy 2 жыл бұрын
@@XpucT Спасибо, попробую, таймаут сделал с запасом, чтобы архив успел распаковаться
@ilyushinandy
@ilyushinandy 2 жыл бұрын
@@XpucT Нет, не хочет он архив запускать на распаковку, я проверил просто в консоли он запускается, и через process.start тоже, а вот в вашем варианте не хочет запускать архив.ехе Пока не понял в чем же проблема, ваш вариант обновления, конечно, мне понравился, хотелось бы внедрить в свой проект Через админа тоже пытался толкнуть, но нет( Может нужно дополнительный ключ использовать🤔
@dinacostudio
@dinacostudio 2 жыл бұрын
Метод с http клиентом скачивает битый файл который невозможно запустить
@XpucT
@XpucT 2 жыл бұрын
Почему у других работает?
@dinacostudio
@dinacostudio 2 жыл бұрын
@@XpucT этот метод работал один раз . Оно действительно скачало и обновило но во второй раз пишет что этот файл невозможно запусить
@XpucT
@XpucT 2 жыл бұрын
@@dinacostudio похоже стоит использовать оригинальную Windows и отказаться от защитников и антивирусов.
@dinacostudio
@dinacostudio 2 жыл бұрын
@@XpucT видимо это действительно так и стоит отказаться от касперского который только мешает как и дефендер который беспорядочно удаляет файлы которые заражены по его мнению
@vadymkon
@vadymkon Жыл бұрын
Ахаха, мне нравится как по прошествию времени(с роликами 2019 если сравнивать) уже меньше разговоров о том, почему то что предлагается тут лучше всяких "а почему не впф" и больше "хуинк."
@ЕвгенийКурск
@ЕвгенийКурск 2 жыл бұрын
😀👍
Уроки C# - Пишем умный ланчер - C#
22:54
Муж внезапно вернулся домой @Oscar_elteacher
00:43
История одного вокалиста
Рет қаралды 7 МЛН
Smart Sigma Kid #funny #sigma
00:33
CRAZY GREAPA
Рет қаралды 26 МЛН
Kreji magic dekho 👀#funny #comedy #shortvideo #shorts
0:16
GJ 12 shorts
Рет қаралды 19 М.
Уроки C# - склеиваем exe и dll
11:35
XpucT
Рет қаралды 25 М.
Как создавать контент c Obsidian x AI
22:13
Никита Шевченко
Рет қаралды 1,4 М.
Регулярные выражения
39:14
XpucT
Рет қаралды 13 М.
2 Years of C++ Programming
8:20
Zyger
Рет қаралды 1 М.
Теперь ComfyUI не страшный! Flow
15:09
DoomAI - технологии
Рет қаралды 3,6 М.