как раз таки и рааспаковывает .zip и переносит всё содержимое в папку с текующей программой
;код из uppdater.exe
ArcPath = C:\Users\%user%\Desktop\upd\update.zip
OutPath = C:\Users\%user%\Desktop
Shell := ComObjCreate("Shell.Application")
Items := Shell.NameSpace(ArcPath).Items
Items.Filter(73952, "*")
Shell.NameSpace(OutPath).CopyHere(Items, 16)
Вот так я запускаю bat и выхожу из основной программы:
run, C:\Users\%user%%tOZON%\Desktop\OzonHelper.upd\upd.bat
exitApp
теперь поясню в чём проблема и к чему эти 100500 файлов bat/exe:
Мы скачали из интернета новую версию на рабочий стол в новую папку - всё норм.
А как заменить старую версию на новую, если из-за запущенного процесса перенос запрещён?
Ответ: при полном скачивании новой версии происходит процесс закрытия основной программы и запуск bat, который в свою очередь запускает другой exe, который и копирует все файлы.
;я не делаю прямой запуск одного exe (updater.exe) из основной программы ибо он так не запускается из-за системы учёток.. крч только через костыли в виде bat работает.
Вот только копирование всё равно не происходит.. хотя основная программа закрыта, а bat и exe файлы, которые делают манипуляции с заменой файлов находятся в другой папке (там же, где и новая версия).
И самое смешное, что если я закрываю эту ошибку и уже от руки запускаю этот bat, то перенос происходит без ошибок. Как это исправить?
Похоже, что проблема может быть связана с тем, что процесс еще не полностью завершился, когда вы пытаетесь копировать новые файлы. Это может происходить, если процесс еще не освободил все свои ресурсы, даже после того, как вы вызвали exitApp. Возможно, вам стоит добавить некоторую задержку в ваш .bat файл перед запуском updater.exe. Это может дать вашему приложению дополнительное время для полного завершения перед тем, как начнется процесс копирования. Вы можете сделать это с помощью команды timeout, как показано ниже: bat timeout /t 5 start C:\Users\%user%\Desktop\upd\updater.exe В этом примере timeout /t 5 означает, что будет добавлена задержка в 5 секунд перед запуском updater.exe. Если это не поможет, возможно, вам придется более детально исследовать, что именно блокирует файлы. Возможно, вам придется использовать инструменты для мониторинга процессов или файловой системы, чтобы увидеть, что происходит.
Задержка не помогла, помогло другое: Я сначала распаковал zip в папку с bat, а потом копировал её на рабочий стол. Прямиком на рабочий стол распакавать нельзя, как минимум потому, что там уже есть такая папка (или из-за чего-то другого)
Обсуждают сегодня