Страница 21 из 32

Добавлено: Пн дек 21, 2015 20:29
Avada
nick58
Замечание за оверквотинг. Совершенно ненужное полное цитирование предыдущего сообщения удалено.

Добавлено: Ср фев 03, 2016 17:56
LonerD
Подниму снова вопрос о NanoZip.
Вот запаковал простейшей командой один текстовый файл в последней версии архиватора:
nz.exe a readme.nz readme.txt
http://rghost.net/7Xg4VJJ5g
С помощью предложенных на англофоруме комбинаций MultiArc последней выложенной версии (от MVV) входит в архив, но ничего внутри не видит. Равно как и не может создать архив.
Как подружить архиватор с MultiArc? :)

Добавлено: Ср фев 03, 2016 19:40
MVV
Подружить так же, как и любой другой архиватор: анализируй консольный вывод и пиши под него форматную строку. Но обрати внимание на моё замечание (его аналог на официальном форуме) о проблематичности написания универсальной форматной строки.

Вообще, формат архива у NanoZip - не айс. Хотя бы из-за имён файлов в ANSI в 21 веке.

Добавлено: Вс май 29, 2016 16:35
Skif_off
MVV
Вроде было уже что-то такое с удалением файлов в каталоге назначения: отсюда слил PilotEdit Lite, двойным кликом вхожу в zip-архив, потом с Ctrl+PdDn в exe'шник и из папки C:\Temp\_tc\Setup.exe\{app}\Styles\ пытаюсь скопировать файлы Vista.cjstyles и WinXP.Luna.cjstyles в каталог, где они уже есть, соглашаюсь на замену файлов - а они удаляются. После этого скопировать эти два файла уже в пустой каталог можно только выйдя из exe'шника и войдя в него снова.
Другие файлы аналогично с заменой копируются без проблем, как и каталог C:\Temp\_tc\Setup.exe\{app} целиком. Что в этих двух не так? Общего только длинное расширение и каталог Styles, точка в имени только у второго.

Пути без пробелов, [A-Za-z_]+.

Добавлено: Вс май 29, 2016 20:41
MVV
У меня копируются нормально. Может, антивирус вредничает?

Добавлено: Вс май 29, 2016 20:46
Flasher
Skif_off писал(а):Пути без пробелов, [A-Za-z_]+.
Вообще-то \w+.

Добавлено: Вс май 29, 2016 21:41
Skif_off
MVV
Антивирусника нет, есть проактивка Comodo, но правила лояльны и для ТС, и для папки с редакторами, удаления или перемещения в настройках и правилах точно нет.
Наверное, сравню с запуском в консоли и в чистом ТС.
Да, так получается в ТС обеих разрядностей.

[cut="2Flasher"]Такой набор исчерпывающий и не нуждается в пояснениях ни для новичка, ни для матёрого.
А ту же небезызвестную либу PCRE можно скомпилить с поддержкой юникода и локалей - тогда по умолчанию в \w+ попадут далеко не только буквы из ASCII.[/cut]

Добавлено: Вс май 29, 2016 21:44
Flasher
Skif_off, тогда [A-z_]+.

Добавлено: Вс май 29, 2016 21:51
MVV
Skif_off писал(а):Антивирусника нет, есть проактивка Comodo, но правила лояльны и для ТС, и для папки с редакторами, удаления или перемещения в настройках и правилах точно нет.
Попробуй временно отключить проактивку и песочницу в Comodo.

Добавлено: Пн май 30, 2016 02:39
Skif_off
MVV
Песочницу не использую, проактивку отключал, пробовал чистый ТС (с UseIniInProgramDir=7 в wincmd.ini) +MultiArc - воспроизводится. Конфиг:
[cut]

Код: Выделить всё

[MultiArc]
ConMode=0
ConMinimize=1
ConExclude=1
ConAClose=1
ConDelay=4
ConLines=0
LanguageFile=Multiarc_Russian.lng

;от MVV:
[InnoSetup]
Description="InnoSetup"
ID=49 6E 6E 6F
IDPos=<SeekID>
Archiver="InnoUnp.exe"
List="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA -v -m %AQA"
Start="^--------------------------------------"
End="^--------------------------------------"
Format0="zzzzzzzzzz+ +yyyy.tt.dd hh:mm +n++"
Extract="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA -e -m %AQA {@%LQA}"
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA -x -m %AQA {@%LQA}"
Debug=0
BatchUnpack=1
[/cut]
В консоли нормально извлекаются после подтверждения перезаписи.

Добавлено: Пн май 30, 2016 10:40
MVV
Взял чистый тотал, последний MultiArc, последний InnoUnp, распаковал файлы Vista.cjstyles и WinXP.Luna.cjstyles в новую папку, потом попытался снова извлечь их в эту же папку с перезаписью - работает; перезапустил тотал и повторил - работает. Может, зависит от пути, в который извлекаешь?

Попробуй в Process Monitor активность посмотреть, а ещё проверить, открыты ли и кем эти файлы в папке назначения и во временной папке (во временной они, впрочем, не должны существовать после успешной операции).

Хм, у меня кое-как после танцев с бубном удаётся воспроизвести. Но вообще перестают копироваться файлы, даже необязательно после копирования с перезаписью. Как поймать, пока не понял...

Что интересно, по F3 тотал при этом показывает файл, и после просмотра файла по F3 они нормально извлекаются...
И что ещё странно: код возврата архиватора, когда файлы не были извлечены, всё равно нулевой!

Вообще, всё-таки скорее всего дело в доступе к файлу. С точками останова после вызова архиватора всё работает, но если после первого вызова не делать паузу (первый вызов - это чтение содержимого архива), то баг проявляется.

Добавлено: Пн май 30, 2016 11:12
Skif_off
MVV
А как удалось воспроизвести? У меня путь для распаковки тоже без чего-либо эдакого: D:\Utilities\editor\_edit\PilotEdit\Styles.

Добавлено: Пн май 30, 2016 11:43
MVV
Я сам не понимаю, как это воспроизвести, оно то воспроизводится, то нет, независимо от наличия точек останова, просмотра файла по F3 и т.д. Но код возврата архиватора неизменно равен 0.

Добавлено спустя 8 минут:

Вообще, кажется, есть объяснение: файлы извлекаются во временную папку, потом перемещаются в папку назначения, а потом временная папка удаляется, при этом используется функция оболочки SHFileOperation. Технически, если оболочка попытается удалить файлы до окончания переноса, мы и получим нашу ситуацию. Надо смотреть, можно ли как-то контролировать процесс...

Добавлено спустя 22 минуты:

Да, функция перемещения возвращает ошибку, когда баг проявляется!
Код ошибки 183 или 0xB7, и, согласно описанию функции,
DE_ERROR_MAX 0xB7 MAX_PATH was exceeded during the operation.
Хотя, тут описан другой баг этой функции с таким же внутренним поведением.
В общем, надо избавляться от этой тупой проводниковой функции и переносить структуру папок вручную.

Добавлено: Пн май 30, 2016 13:18
Skif_off
MVV писал(а):Технически, если оболочка попытается удалить файлы до окончания переноса, мы и получим нашу ситуацию.
Не совсем уловил :) Правильно ли понимаю, что файл в каталоге назначения удаляется, а потом туда копируется новый? Тогда получается, что тут файл только удаляется и всё?

Дёрнуло что-то меня убрать ConPaste.exe:

Код: Выделить всё

List="%PQA -v -m %AQA"
Extract="%PQA -e -m %AQA {@%LQA}"
ExtractWithPath="%PQA -x -m %AQA {@%LQA}"
так не воспроизводится.

Добавлено спустя 2 минуты:

P.S. ConPaste.exe: 2016.04.03, SHA1=48079878f45bbfb800be85bb13e2cdb3394e838c

Добавлено: Пн май 30, 2016 14:17
MVV
Если файлы в папке назначения существуют, то они удаляются до начала копирования туда новых.

Копирование новых выполняется переносом извлечённых архиватором файлов из временной папки посредством вызова функции SHFileOperation. По непонятным причинам (погодные явления, фаза луны, чётность номера дня со времён большого взрыва) функция SHFileOperation время от времени не отрабатывает правильно и возвращает ошибку.

Это происходит уже в коде MultiArc, когда ConPaste и архиватор уже успешно отработали, и когда файлы уже извлечены во временную папку.

Добавлено спустя 39 минут:

Похоже, баг проявляется только для подпапок в архиве, и только если имя папки назначения совпадает с именем подпапки, из которой извлекаются файлы. И дескриптор этой папки открыт, когда копирование проваливается (попробовал закрыть его принудительно - возникла ошибка обращения к закрытому дескриптору, но функция копирования потом отработала нормально). Перезапускаю тотал, пытаюсь извлечь в папку с таким же именем - ошибка, переименовываю папку или захожу в другую - всё ок. Воспроизводимость 100%.

Рецепт остаётся прежним - избавиться от SHFileOperation.