?

Log in

No account? Create an account

Previous Entry | Next Entry

Что за хрень творится?!

Сколько пишу .bat-файлы, но с такой хренью не сталкивался. У меня .bat-сценарий случайным образом (т.е. не каждый раз) выдает ошибку access denied при попытке исполнить только что созданную программу или при попытке удалить только что исполненную программу. Выглядит так, как будто программа еще не успела дописаться к моменту запуска и не успела отработать к моменту удаления.

Сам скрипт:


@echo off
:a
copy /B 7z.exe 7.exe >nul
7.exe >nul
del 7.exe >nul
goto a


В консоль выдает ошибки:


E:\->e.bat
Access is denied.
The requested operation cannot be performed on a file with a user-mapped section open.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
The requested operation cannot be performed on a file with a user-mapped section open.
Access is denied.
The requested operation cannot be performed on a file with a user-mapped section open.
Access is denied.
Access is denied.
Access is denied.


Сопутствующие обстоятельства:
1. ОС Windows 7 Enterprise, процессор Intel Core 2 Quad
(под XP не воспроизводится)
2. Антивирус - AVAST
(однако отключение всех его "экранов" в момент запуска скрипта не помогло)
3. Скрипт исполнялся в "консоли" Far и в стандартной консоли (cmd, start)
(глюк случается во всех консолях)
4. Диск E:, на котором все происходит, ничем не примечателен - обычный жесткий, никаких экзотических режимов на нем не включено
5. То, что в примере использован 7z.exe, неважно: тот же глюк воспроизводится, если взять какую-нибудь другую консольную программу, которая при запуске без параметров немного пишет в stdout и без задержки завершается.


Помогите разобраться, пожалуйста :)

Upd: спасибо metaclass, проблема решена.

Comments

( 22 comments — Leave a comment )
sam_buddy
Jun. 26th, 2012 07:02 am (UTC)
А если @echo off убрать, тогда что?
psilogic
Jun. 26th, 2012 07:10 am (UTC)
Тогда просто менее наглядно (больше текста в консоли), и видно, что эти ошибки происходят после команд 7.exe и del, но не каждый раз, а случайно.
sam_buddy
Jun. 26th, 2012 07:12 am (UTC)
У 7.exe атибут рид-онли часом не стоит? Атрибуты, кажись, тоже копируются.
psilogic
Jun. 26th, 2012 07:15 am (UTC)
Нет, не стоит. И вообще ошибки выскакивают не каждую итерацию, а иногда раз в 100 циклов. Т.е. по всем признакам что-то такое нехорошее с синхронизацией процессов.
_stilgar
Jun. 26th, 2012 07:05 am (UTC)
Для начала - запустить под администратором. Если не сработает - значит, 99% - антивирус. Или вирус, они сейчас примерно равнозначны по вредоносности.
psilogic
Jun. 26th, 2012 07:14 am (UTC)
Под админисратором глюка нет. Но при чем тут админисратор, если все права для исполнения скрипта имеются? Иногда проходит 200 успешных итераций цикла до появления первого Access denied.

Edited at 2012-06-26 07:16 am (UTC)
_stilgar
Jun. 26th, 2012 07:22 am (UTC)
попробуй после копирования поставить
timeout /T 1 >nul

если пауза в 1 не критична.
psilogic
Jun. 26th, 2012 07:25 am (UTC)
тогда вроде нет ошибок
_stilgar
Jun. 26th, 2012 07:28 am (UTC)
Судя по всему, права файла не всегда успевают обновиться сразу после копирования.
metaclass
Jun. 26th, 2012 07:32 am (UTC)
Восстановление системы, индексация диска и прочий трэш случаем не мешают?
metaclass
Jun. 26th, 2012 07:33 am (UTC)
Запусти procmon.exe (от sysinternals)
Добавь в фильтр "имя файла" 7.exe
И запиши лог операций с ними - далее его можно будет проанализировать на предмет пересекающихся операций с этим файлом.

Edited at 2012-06-26 07:33 am (UTC)
eugenebo
Jun. 26th, 2012 08:29 am (UTC)
+1.

И почти наверняка антивирус. Видит новый экзешник, хочет проверить, открывает с эксклюзивным правом на чтение, а тут вдруг мы со своим удалением, "как некстати!..."
psilogic
Jun. 26th, 2012 08:17 pm (UTC)
Спасибо, это была хорошая идея: по результатам расследования виновным признан Comodo Firewall
crackadil
Jun. 26th, 2012 08:37 am (UTC)
попробуй саму службу аваста остановить :)
litvin_v
Jun. 26th, 2012 09:55 am (UTC)
Не поможет?
start /wait 7.exe
2000000lemmings
Jun. 26th, 2012 10:08 am (UTC)
+100500
Без этого интерпретатор не будет ждать завершения программы перед выполнением следующей команды.
no1u1w1w6c
Jun. 26th, 2012 05:00 pm (UTC)
вообще-то как раз без start всю жизнь ждал. они и это умудрились ненавязчиво поменять в своей новой говноос?
psilogic
Jun. 26th, 2012 07:47 pm (UTC)
это в start не будет ждать, а так, как в скрипте - должен ждать
psilogic
Jun. 26th, 2012 07:46 pm (UTC)
пробовал, не помогает
karadriel
Jul. 10th, 2012 05:54 pm (UTC)
Единственное что вызывает недоумение - зачем такой странный скрипт? О.о
psilogic
Jul. 10th, 2012 06:51 pm (UTC)
Для простоты восприятия. Изначально проблема возникла на скрипте автотестирования с той же проблемой, но в 200 строк длиной.
karadriel
Jul. 11th, 2012 08:18 am (UTC)
Ага... ага... выделили проблемный участок. Любопытная проблема, буду знать.

Edited at 2012-07-11 08:18 am (UTC)
( 22 comments — Leave a comment )

Profile

ioda
psilogic
Мирослав Войнаровский
Психологика

Latest Month

September 2019
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     
Powered by LiveJournal.com
Designed by yoksel