169 похожих чатов

В .bat я прописал команду, которая запускает .exe файл, который

как раз таки и рааспаковывает .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, то перенос происходит без ошибок. Как это исправить?

2 ответов

34 просмотра

Похоже, что проблема может быть связана с тем, что процесс еще не полностью завершился, когда вы пытаетесь копировать новые файлы. Это может происходить, если процесс еще не освободил все свои ресурсы, даже после того, как вы вызвали exitApp. Возможно, вам стоит добавить некоторую задержку в ваш .bat файл перед запуском updater.exe. Это может дать вашему приложению дополнительное время для полного завершения перед тем, как начнется процесс копирования. Вы можете сделать это с помощью команды timeout, как показано ниже: bat timeout /t 5 start C:\Users\%user%\Desktop\upd\updater.exe В этом примере timeout /t 5 означает, что будет добавлена задержка в 5 секунд перед запуском updater.exe. Если это не поможет, возможно, вам придется более детально исследовать, что именно блокирует файлы. Возможно, вам придется использовать инструменты для мониторинга процессов или файловой системы, чтобы увидеть, что происходит.

% A_UserName-Atroshkin Автор вопроса
Владимир
Похоже, что проблема может быть связана с тем, что...

Задержка не помогла, помогло другое: Я сначала распаковал zip в папку с bat, а потом копировал её на рабочий стол. Прямиком на рабочий стол распакавать нельзя, как минимум потому, что там уже есть такая папка (или из-за чего-то другого)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта