psilogic: (Default)
[personal profile] psilogic
Сколько пишу .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: спасибо [livejournal.com profile] metaclass, проблема решена.

Date: 2012-06-26 07:02 am (UTC)
From: [identity profile] sam-buddy.livejournal.com
А если @echo off убрать, тогда что?

Date: 2012-06-26 07:10 am (UTC)
From: [identity profile] psilogic.livejournal.com
Тогда просто менее наглядно (больше текста в консоли), и видно, что эти ошибки происходят после команд 7.exe и del, но не каждый раз, а случайно.

Date: 2012-06-26 07:12 am (UTC)
From: [identity profile] sam-buddy.livejournal.com
У 7.exe атибут рид-онли часом не стоит? Атрибуты, кажись, тоже копируются.

Date: 2012-06-26 07:15 am (UTC)
From: [identity profile] psilogic.livejournal.com
Нет, не стоит. И вообще ошибки выскакивают не каждую итерацию, а иногда раз в 100 циклов. Т.е. по всем признакам что-то такое нехорошее с синхронизацией процессов.

Date: 2012-06-26 07:05 am (UTC)
From: [identity profile] http://users.livejournal.com/_stilgar/
Для начала - запустить под администратором. Если не сработает - значит, 99% - антивирус. Или вирус, они сейчас примерно равнозначны по вредоносности.

Date: 2012-06-26 07:14 am (UTC)
From: [identity profile] psilogic.livejournal.com
Под админисратором глюка нет. Но при чем тут админисратор, если все права для исполнения скрипта имеются? Иногда проходит 200 успешных итераций цикла до появления первого Access denied.
Edited Date: 2012-06-26 07:16 am (UTC)

Date: 2012-06-26 07:22 am (UTC)
From: [identity profile] http://users.livejournal.com/_stilgar/
попробуй после копирования поставить
timeout /T 1 >nul

если пауза в 1 не критична.

Date: 2012-06-26 07:25 am (UTC)
From: [identity profile] psilogic.livejournal.com
тогда вроде нет ошибок

Date: 2012-06-26 07:28 am (UTC)
From: [identity profile] http://users.livejournal.com/_stilgar/
Судя по всему, права файла не всегда успевают обновиться сразу после копирования.

Date: 2012-06-26 07:32 am (UTC)
From: [identity profile] metaclass.livejournal.com
Восстановление системы, индексация диска и прочий трэш случаем не мешают?

Date: 2012-06-26 07:33 am (UTC)
From: [identity profile] metaclass.livejournal.com
Запусти procmon.exe (от sysinternals)
Добавь в фильтр "имя файла" 7.exe
И запиши лог операций с ними - далее его можно будет проанализировать на предмет пересекающихся операций с этим файлом.
Edited Date: 2012-06-26 07:33 am (UTC)

Date: 2012-06-26 08:29 am (UTC)
From: [identity profile] eugenebo.livejournal.com
+1.

И почти наверняка антивирус. Видит новый экзешник, хочет проверить, открывает с эксклюзивным правом на чтение, а тут вдруг мы со своим удалением, "как некстати!..."

Date: 2012-06-26 08:17 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Спасибо, это была хорошая идея: по результатам расследования виновным признан Comodo Firewall

Date: 2012-06-26 08:37 am (UTC)
From: [identity profile] crackadil.livejournal.com
попробуй саму службу аваста остановить :)

Date: 2012-06-26 09:55 am (UTC)
From: [identity profile] litvin-v.livejournal.com
Не поможет?
start /wait 7.exe

Date: 2012-06-26 10:08 am (UTC)
From: [identity profile] 2000000lemmings.livejournal.com
+100500
Без этого интерпретатор не будет ждать завершения программы перед выполнением следующей команды.

Date: 2012-06-26 05:00 pm (UTC)
From: [personal profile] no1u1w1w6c
вообще-то как раз без start всю жизнь ждал. они и это умудрились ненавязчиво поменять в своей новой говноос?

Date: 2012-06-26 07:47 pm (UTC)
From: [identity profile] psilogic.livejournal.com
это в start не будет ждать, а так, как в скрипте - должен ждать

Date: 2012-06-26 07:46 pm (UTC)
From: [identity profile] psilogic.livejournal.com
пробовал, не помогает

Date: 2012-07-10 05:54 pm (UTC)
From: [identity profile] karadriel.livejournal.com
Единственное что вызывает недоумение - зачем такой странный скрипт? О.о

Date: 2012-07-10 06:51 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Для простоты восприятия. Изначально проблема возникла на скрипте автотестирования с той же проблемой, но в 200 строк длиной.

Date: 2012-07-11 08:18 am (UTC)
From: [identity profile] karadriel.livejournal.com
Ага... ага... выделили проблемный участок. Любопытная проблема, буду знать.
Edited Date: 2012-07-11 08:18 am (UTC)
Page generated Jul. 25th, 2025 12:15 am
Powered by Dreamwidth Studios