Нужно сделать систему обновлений.
Качаются новые файлы, а потом нужно сам запущенный файл обновить.
Удалить сам себя он не может, т.к. вгружен в память - решил сделать bat файл или другое приложение, которое запустится,удалит его и назовёт его именем новую версию и запустит потом, но получается, что bat файл выполняется не отдельно, а вгружается в саму программу- ну и в результате ничего не происходит.
Как решаются проблемы обновления запущенного файла?
Переименовать запущенный файл получается?:) Если да:
- переименовать в bin/program_v123456
- загрузить новую версию в /bin/program
- проверить запускается ли, если всё ок то отлично, если нет - откаваем программу обратно...
Владимир Грабко он обновил сам файл, с какого запустился, но при этом не перезапустился...а как просто перезапустить программно?bat команда почему-то не перезапускает, либо я что-то не то пишу
Роман Ракзин: Обычно люди юзают systemd на серверах. Если у вас винда то понятно от куда ноги растут. Я бы на вашем месте написал бы лаунчер который бы слал api хеш локального бинарника и если не совпало то загружал новый и запускал его (cmd пакет)
Роман Ракзин: так сделано почти во всём софте под виндой. Ну иногда запускают в виде демона updater который "следит" за версией постоянно, а не при запуске (гугл хром к примеру) или же при старте системы стартует лаунчер (флешплеер)
Могу посоветовать в общем случае, не по языку. У нас есть ПО, которое запускается только при определенных условиях. Если условия не подходят, то это ПО создает рядом с собой батник и запускает его, а само выгружается. Батник затем действует независимо. В нем прописано удаление экзешника ПО и затем он удаляет сам себя.
В вашем случае я думаю можно сделать все так же, только сам главный экзешник обновлять в последнюю очередь