Страница 7 из 8

Добавлено: Вт апр 11, 2017 22:52
Dec
Flasher писал(а):А вот если получатель - архив, то прогресса нет.
Стандартной практикой в shell подсистеме является отсутствие диалогов в ситуации, когда в операцию не передан дескриптор какого нибудь окна, которое станет родительским по отношению к создаваемым в случае необходимости создания окон. Я придерживаюсь этой практики. Поскольку wscript.exe не передает ни какой дескриптор окна, TC4Shell считает, что UI не нужен. Ну а раз UI не нужен, то и окно прогресса не нужно.
Flasher писал(а):После того как...
Я поизучаю, как работает SHFileOperation с этим флагом.
Flasher писал(а):Речь про web-связку. Т.е. с этим проблем нет?
Проблем нет. Это фишка Проводника, я пока не планирую ее повторять.

Добавлено: Вт апр 11, 2017 22:56
Flasher
Dec писал(а):отсутствие диалогов в ситуации, когда в операцию не передан дескриптор какого нибудь окна
Например? Дескриптор какого окна может быть передан, если мы задаём только пути?
Dec писал(а):Это фишка Проводника, я пока не планирую ее повторять.
Ясно.

Добавлено: Вт апр 11, 2017 23:42
Dec
Flasher писал(а):Дескриптор какого окна может быть передан, если мы задаём только пути?
Я говорю в целом о shell подсистеме. Например, при операции drag&drop (при которой вызывается тот же самый код, что и при работе скрипта), мне передается дескриптор окна, соответственно я отображаю UI при необходимости. Средствами vbs дескриптор не передать. Ну а раз нет ножек, значит нет и мультиков.

Добавлено: Вт апр 11, 2017 23:58
Flasher
Dec писал(а):Ну а раз нет ножек, значит нет и мультиков.
Так я выше написал, что мультики есть в случае папок без окон. Вот и спрашиваю, откуда там дескриптор?

Добавлено: Ср апр 12, 2017 01:55
Dec
Flasher писал(а):Вот и спрашиваю, откуда там дескриптор?
Ну, MS славится нарушением собственных стандартов. Возможно, они показывают прогресс всегда независимо от наличия переданного дескриптор.

Добавлено спустя 1 час 55 минут:
Flasher писал(а):При попытке скопировать файлы в этот архив выпадает окно с ошибкой
Поправил свой код. Проверяй.

Добавлено: Ср апр 12, 2017 03:07
Flasher
Порядок.
1. Что по 4096 и MoveHere?
2. А какие вообще плюсы у создания tmp в том же каталоге с заменой архива? Я утилитой могу распаковать файлы и переместить в архив. Я полагался на перенос, равносильный тому, что происходит между папками. В чём же тут виртуальность?
3. И ещё насчёт разрешения ассоциации для exe. Что нужно сделать, чтобы оно распространялось и на обсуждаемые методы?

Добавлено: Ср апр 12, 2017 03:13
Dec
Flasher писал(а):1. Что по 4096 и MoveHere?
(Экий ты быстрый) Изучаю вопрос.
Flasher писал(а):А какие вообще плюсы у создания tmp в том же каталоге с заменой архива?
Как бы ты не упаковывал, чем бы ты не упаковывал, что бы ты не упаковывал, tmp файл будет создаваться в любом случае.
Flasher писал(а):И ещё насчёт разрешения ассоциации для exe. Что нужно сделать, чтобы оно распространялось и на обсуждаемые методы?
Не понят вопроса.

Добавлено: Ср апр 12, 2017 03:24
Flasher
Dec писал(а):Экий ты быстрый
Просто постоянная переустановка из-за каждой незначительной правки с вероятностью нарваться на перезагрузку системы как-то не радует. Проще подождать нескольких правок, тем более, что на данном этапе это не горит.
Dec писал(а):чем бы ты не упаковывал, что бы ты не упаковывал, tmp файл будет создаваться в любом случае.
В смысле? Сама упаковка из общих папок никаких tmp не подразумевает. Если бы такое было, я бы это ещё 100 лет назад заметил.
Dec писал(а):Не понят вопроса.
Мы обсуждаем методы CopyHere/MoveHere. Если источник exe, то как заставить их с ним работать?

Добавлено: Ср апр 12, 2017 03:34
Dec
Flasher писал(а):Сама упаковка из общих папок никаких tmp не подразумевает. Если бы такое было, я бы это ещё 100 лет назад заметил.
Т.е. ты хочешь сказать, что 7z умеет обновлять архивы без создания временных файлов?
Flasher писал(а):Если источник exe, то как заставить их с ним работать?
Для кого я это писал?

Добавлено: Ср апр 12, 2017 04:31
Flasher
Dec писал(а):Т.е. ты хочешь сказать, что 7z умеет обновлять архивы без создания временных файлов?
Не, не умеет. Но она хотя бы в Temp их кидает.
Dec писал(а):Для кого я это писал?
Это я помню. Мы же там обсуждали, как разобраться отдельно с exe.
А вот если получатель - архив, то прогресса нет.
Ошибочка. Без привязи к TC4Shell он есть:
Изображение
Так что запрос остаётся актуальным. Если не получится, то по умолчанию TC4Shell лучше отвязать от ProgID zip-а.

Насчёт диалога ассоциаций. А можешь сделать, чтобы при применении обновлялись только изменённые значения вместо полной перезаписи?

Добавлено: Ср апр 12, 2017 05:59
Dec
Flasher писал(а):Что по 4096?
Я так и не понял, за что этот флаг отвечает.
Flasher писал(а):Что по MoveHere?
Как ни странно, но как для сценариев, где указана функция CopyHere, так и для сценариев, где указана функция MoveHere, wscript.exe передает набор флагов [DROPEFFECT_COPY, DROPEFFECT_MOVE, DROPEFFECT_LINK], что обозначает, что я сам должен выбрать из этих вариантов, что мой код будет делать (мой код выбирает всегда DROPEFFECT_COPY). Т.е. я не могу в своем коде отличить CopyHere от MoveHere.
Flasher писал(а):Но она хотя бы в Temp их кидает.
А чем Temp лучше директории архива? Я лишь вижу две причины, чем хуже.

1) Temp может располагаться на другом физическом диске. Это обозначает, что после создания новой версии архива новый файл нужно КОПИРОВАТЬ с диска на диск вместо простого удаления исходного архива и переименования новой копии.

2) Для shell важна скорость, с которой обновляется файл. Если исходный архив удалить и начать копировать его новую версию из другой папки, то shell будет считать, что файл удален, и окна с архивами, открытые в Проводнике, просто закроются. А если удалить и быстро переименовать, то для shell это будет обновленный файл, поэтому окна с архивами, открытые в Проводнике, просто обновятся в соответствии с новым содержимым архива.
Flasher писал(а):Если не получится, то по умолчанию TC4Shell лучше отвязать от ProgID zip-а.
Если тебе не нужна ассоциация между zip и TC4Shell, то просто не включай ее. Или что то иное подразумевалось?
Flasher писал(а):А можешь сделать, чтобы при применении обновлялись только изменённые значения вместо полной перезаписи?
Нет. Это механизм самодиагностики и подчистки ненужных файлов.

Добавлено: Ср апр 12, 2017 06:50
Flasher
Dec писал(а):Я так и не понял, за что этот флаг отвечает.
А просто добавить его можно, чтобы избежать проблем?
Dec писал(а):Т.е. я не могу в своем коде отличить CopyHere от MoveHere.
Предлагаю по неиспользуемому флагу. 64, например.
Dec писал(а):А чем Temp лучше директории архива?
Никогда не любил, когда времянки создавались в том же каталоге. Во всех скриптах скидывал их только в Temp. 7z.exe, кстати, так же делает. Не всегда ясно без сигналов, откуда этот tmp прибыл. В моменты операций с файлами в той же панели этот файл может случайно оказаться в обрабатываемом списке после групповых выделений, что крайне нежелательно.
1) В крайнем случае можно сравнивать буквы дисков и в случае совпадения, перемещать в Temp. Архивы в отличии от медиа чаще собирают на системном диске. В случае иных дисков можно искать в корне System Volume Information либо $RECYCLE.BIN и скидывать туда, если нет, то создавать папку с атрибутом "скрытый".
2) Окна с архивами в Проводнике как-то касаются скриптов? Зачем им окна?
Dec писал(а):Или что то иное подразумевалось?
Постараться выяснить, как отобразить прогресс аналогично системному поведению, добавить связанные флаги. Если не выйдет, то сделать привязку zip к ProgID системы по умолчанию, чтобы пользователю не рассказывать как специально добиться такого результата.
Dec писал(а):Это механизм самодиагностики и подчистки ненужных файлов.
Не понял. Он так медленно срабатывает из-за чтения реестра? Диагностировать то он должен перед отрисовкой флагов в окне. А при чём тут применение?

Добавлено: Ср апр 12, 2017 07:36
Dec
Flasher писал(а):А просто добавить его можно, чтобы избежать проблем?
Добавляй, я просто игнорирую ее в своем коде.
Flasher писал(а):Предлагаю по неиспользуемому флагу.
Однозначно нет, никаких хаков я использовать не буду. Код обработки один для всего, и для твоих скриптов, и для Drag&Drop, и для Copy&Paste. Завтра еще кто-нибудь создаст какого нибудь клиента, который будет использовать NSE типа моего для манипуляций с архивами. И кто-то может случайно передать недокументированный флаг и потерять данные.
Flasher писал(а):Никогда не любил, когда времянки создавались в том же каталоге.
А я наоборот.
Flasher писал(а):В крайнем случае можно сравнивать буквы дисков и в случае совпадения, перемещать в Temp.
Одинаковые буквы дисков - это еще не обозначает, что файлы расположены на одном физическом диске, ибо есть такая штука, как hardlink.
Flasher писал(а):Окна с архивами в Проводнике как-то касаются скриптов?
Потому что код обработки один для всего, использовать хаки для определения того, какая операция выполняется я однозначно не буду.
Flasher писал(а):Постараться выяснить, как отобразить прогресс аналогично системному поведению
Это я и так знаю, как сделать. Но делать не буду. Нет переданного дескриптора окна - нет UI.
Flasher писал(а):добавить связанные флаги
Куда добавить? Какие флаги?
Flasher писал(а):Если не выйдет, то сделать привязку zip к ProgID системы по умолчанию, чтобы пользователю не рассказывать как специально добиться такого результата.
Не понимаю эту фразу. Если не нужна ассоциация между zip и TC4Shell, то просто не включай ее.
Flasher писал(а):Он так медленно срабатывает из-за чтения реестра?
Не занимался анализом.
Flasher писал(а):Диагностировать то он должен перед отрисовкой флагов в окне. А при чём тут применение?
Возможно, диагностика не совсем правильный термин. При применении происходит обновление всех записей в реестре на случай, если они были изменены, или была произведена установка ассоциаций с другими программами (в этом случае я удаляю ненужные записи в реестре).

Добавлено: Ср апр 12, 2017 13:05
Flasher
Dec писал(а):Добавляй, я просто игнорирую ее в своем коде.
Я имел в виду тебя. Мне то зачем добавлять то, что не поможет? Проблему наличие неработающего флага не вызовет, проблему может вызвать как раз его неработоспособность.
Dec писал(а):Однозначно нет
Ну, если ты не сделаешь MoveHere, то все твои последние старания коту под хвост.
Dec писал(а):не обозначает, что файлы расположены на одном физическом диске, ибо есть такая штука, как hardlink.
Которая всегда расположена не то, что на одном физическом диске, а в пределах его одного тома. :D
Dec писал(а):Куда добавить? Какие флаги?
В смысле куда? В код. 4 ты уже добавил. Остался 256.
Dec писал(а):Если не нужна ассоциация между zip и TC4Shell
Так это объяснять мне как автору скрипта придётся, что и нужно избежать.
Dec писал(а):При применении происходит обновление всех записей в реестре на случай, если они были изменены
Вот это вещь должна быть строго опциональной, ИМХО. Мало ли кто и по какой причине вносил правку. Было бы правильно флаг снизу добавить.

Добавлено: Ср апр 12, 2017 13:38
Dec
Flasher писал(а):Я имел в виду тебя.
А что мне добавить, если мы так и не выяснили, за что этот флаг отвечает.
Flasher писал(а):Ну, если ты не сделаешь MoveHere
А почему тебе так принципиально использовать именно MoveHere, почему не хочешь просто удалить файлы после CopyHere - Items.InvokeVerbEx("delete") (правда, тебе придется снова обновить TC4Shell с риском перезагрузки)
Flasher писал(а):Которая всегда расположена не то, что на одной физическом диске, а в пределах его одного тома. :D
Ок, спутал с junctions points.
Flasher писал(а):Так это объяснять мне как автору скрипта придётся, что и нужно избежать.
Просто пиши комментарий в скрипте, что окна с прогрессом не будет, потому что автор TC4Shell не хочет его делать.