Ru-Board.club
← Вернуться в раздел «Программы»

» TC4Shell - работа с архивами в Проводнике

Автор: Aniskin
Дата сообщения: 20.07.2015 18:27
Inoz2000

Цитата:
ну дык HKCU\Software\Classes\SystemFileAssociations же!

Теперь, вроде бы, пазл сошелся. Попробую в следующей версии твое предложение.

Добавлено:
Inoz2000
Выяснился новый факт. Ветка HKCR\ProgId\CLSID имеет более высокий приоритет, нежели HKCR\SystemFileAssociations\.ext\CLSID\CLSID. Это приводит к тому, что на голой системе, в которой zip имеет ProgID CompressedFolder zip файлы не удается ассоциировать с TC4Shell, поскольку Проводник использует ветку HKCR\CompressedFolder\CLSID, а не HKCR\SystemFileAssociations\.zip\CLSID. Поэтому независимо от настроек TC4Shell для открытия zip файлов Проводник использует собственное расширение оболочки, а не мое. Советы?
Автор: Inoz2000
Дата сообщения: 20.07.2015 23:38

Цитата:
Советы?
Только что прочёл и не понял глубины вопроса
На голой системе сабж прекрасно отработает с тем алгоритмом регистрации, который есть сейчас. У zip-архивов есть свой ProgID, у CAB-архивов — свой.
Автор: Aniskin
Дата сообщения: 20.07.2015 23:42
На голой системе после попытки ассоциации zip и TC4Shell система для открытия zip использует не TC4Shell, а свой NSE. Т.е. проводник открывает zip, но не с помощью TC4Shell.
Автор: Inoz2000
Дата сообщения: 21.07.2015 00:09
И когда об этом стало известно? Судя по картинке, всё это было продумано заранее.
создавались записи в HKCU\Software\Classes\CompressedFolder.


Я не знаю, что такое NSE, но стоит убрать из ProgramFiles папку TC4Shell, как ссразу же перестают открываться и 7z, и zip, и cab, которые я успел ассоциировать перед удалением. ЧЯДНТ?
Автор: Aniskin
Дата сообщения: 21.07.2015 00:27
Inoz2000

Цитата:
И когда об этом стало известно?
Не понял вопроса.


Цитата:
Судя по картинке, всё это было продумано заранее. создавались записи в HKCU\Software\Classes\CompressedFolder.
Да, но ранее я замещал параметр HKCU\Software\Classes\CompressedFolder\CLSID на свой, а теперь по твоему совету я пишу в HKCR\SystemFileAssociations\.zip\CLSID.


Цитата:
И как отличить, через что проводник заходит в zip или cab
Например, по контекстному меню внутри архива.


Цитата:
Не морочьте голову!
Даже и не пытаюсь. Видимо мы говорим про разные вещи. Я реализовал регистрацию на своей машине по принципу который ты предложил. Он имеет побочный эффект, который я описал.


Цитата:
Я не знаю, что такое NSE
Namespace shell extension. Это то, чем является TC4Shell. Это то, чем открывал Проводник zip и cab файлы до появления TC4Shell.


Цитата:
но стоит убрать из ProgramFiles папку TC4Shell, как ссразу же перестают открываться и 7z, и zip, и cab, которые я успел ассоциировать перед удалением.
Ассоциировать как? Средствами TC4Shell? Или ручками правкой реестра согласно предложенного тобой метода регистрации?
Автор: Inoz2000
Дата сообщения: 21.07.2015 00:42
Мы же столкнулись с частным случаем, когда

Цитата:
ZIP [more=файлы]
Цитата: А с точки зрения TC4Shell архивом является любой файл, для которого есть плагин, который его может открыть. Для WCX есть плагин 7z.Pe, поэтому WCX считается архивом. Если будут предложения по изменению терминологии - с удовольствием выслушаю.
[/more] уже обрабатываются расширением оболочки CompressedFolder
Автор: Aniskin
Дата сообщения: 21.07.2015 00:56

Цитата:
для этого прекрасно подходит

Ок. Мы имеем два алгоритма регистрации TCShell.

1) Тот, что сейчас реализован в той версии, что лежит на сайте. Он имеет побочный эффект в виде:

Цитата:
когда в системе установлен WinRar и с ним ассоциированы все архивы, то у них у всех (кроме zip) один тип файла [HKEY_CLASSES_ROOT\WinRAR]. Стоит только включить навигацию для одного расширения (напр. 7z), как все остальные архивы тоже отображаются в дереве папок, но не открываются


2) Предложенный тобой. Он имеет побочный эффект в виде:

Цитата:
Проводник использует собственное расширение оболочки, а не мое


Какой метод использовать? Или комбинировать в зависимости от ситуации? На самом деле zip и cab файлы - это не единственные файлы, которые "из коробки" имеют свой CLSID ключ, и для которых приемлем только первый способ.
Автор: ffffjjjj
Дата сообщения: 21.07.2015 01:14
Aniskin

Я вот знаю что если открывать архив в Rar-е то рар считывает его содержимое, но сам файл архива в памяти не держит, а когда происходит запуск файла из архива тот рар экстрактит в темп запускаемый файл и те которые ему нужны лежащие рядом, затем по завершению процесса всё это добро удаляется, если только окно архива не было закрыто до процесса.

Вопрос такой, а как у вас всё это дело реализовано ?

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

И ещё такой вопрос, а если приложению нужен доступ к файлу из архива оно может считать его через данное расширение? Если да, то нужно ли для этого предварительно открыть архив в эксплорере ?



Автор: Aniskin
Дата сообщения: 21.07.2015 01:32
ffffjjjj

Цитата:
Вопрос такой, а как у вас всё это дело реализовано?
Аналогично. Но есть одно но, которое касается всех программ, реализующих подобное. Запущенная программа может в свою очередь запустить другую, передать ей в качестве параметра файл, а сама закроется. В этом случае TC4Shell считает, что файл более не нужен, и удаляет его. И вторая программа не успеет считать файл. Но эта проблема не излечима разумными средствами.


Цитата:
если приложению нужен доступ к файлу из архива оно может считать его через данное расширение?
Чтение файлов из архива с помощью данного расширения (и вообще с помощью любого другого, интерфейсы взаимодействия у них одинаковы) сторонней программой программистом, написавшем эту программу, технически может быть реализовано, но никто этим не заморачивается. Большинство приложений написаны для работы в классических файловых системах, поэтому, в 99,99999% случает ответ нет.
Автор: Inoz2000
Дата сообщения: 21.07.2015 02:07
Я специально акцентировал в цитате, что ZIP это -файлы. Их надо как-то привести к одному виду и назвать архивами.


Цитата:
комбинировать в зависимости от ситуации?
а почему нет?

Цитата:
не единственные файлы, которые "из коробки" имеют свой CLSID ключ
С CompressedFolder сомнений не возникало, значит и с другими файлами надо поступать так же точно. Показать предупреждение для порядка.
Кстати, список таких файлов с CLSID, которые могут быть открыты в виде архива, мягко говоря, невелик.
Пока других мыслей нет.

Добавлено:

Цитата:
Придется с этим жить.

Во всяком случае, уж лучше так, чем то, что сейчас
Автор: Aniskin
Дата сообщения: 21.07.2015 09:29
Inoz2000


Цитата:
Я специально акцентировал в цитате, что ZIP это -файлы.
К сожалению, боги не наградили меня при рождении умением понимать намеки. Поэтому я не понимаю тонких намеков. Я не понимаю толстых намеков. Я не понимаю намеков вообще. А иногда я не понимаю намеков принципиально. Поэтому если есть какая-либо мысль, которую нужно донести до меня, то лучше писать ее прямым текстом.


Цитата:
Их надо как-то привести к одному виду и назвать архивами.
В данном случае Zip - это файл. Строка, которую ты видишь в окне свойств, формируется автоматически при наличии ключа CLSID у ProgID расширения файла, а не только для zip файлов. Но наличие ключа CLSID не говорит о том, что файл открывается в проводнике. Это говорит о том, что есть некий сервер, который обрабатывает файлы с данным расширением. Что это за сервер и как он обрабатывает файлы с данным расширением мне не известно. Замена ключа на мой может (в общем случае) привести к неработоспособности какой то части функциональности системы. Поэтому в данном случае я использую термин файл, а не архив.
Автор: Inoz2000
Дата сообщения: 21.07.2015 09:58

Цитата:
формируется автоматически
Значит моё предложение звучит так:
Надо добавить к существующей автоматике немного логики.

Исходя из вышесказанного,
если какой-то файл может быть открыт в проводнике с помощиью TC4Shell, значит слово "файлы", при формировании этого предупреждения должно быть заменено на "архивы".


Цитата:
Но наличие ключа CLSID не говорит о том, что файл открывается в проводнике.
я этого не утверждал.

Добавлено:
Вернее, не утверждал обратное.
Автор: Aniskin
Дата сообщения: 25.07.2015 13:44
Обновил.

- Множество внутренних оптимизаций, направленных на ускорение работы.
- При Drag&Drop файла в архив при нажатии Ctrl+Shift появляется окно настроек.
- Изменена методика регистрации.
- Косметические изменения.
Автор: Inoz2000
Дата сообщения: 25.07.2015 14:45

Цитата:
Обновил.

А на сайте написано версия 160
Спасибо за
Цитата:
- Изменена методика регистрации.
теперь установил себе ещё и на ноутбук и друзьям установлю.

Интернет эксплорер предлагает включить надстройку 'TC4Shell BHO extension'
Что даст её включение?
Автор: Aniskin
Дата сообщения: 25.07.2015 14:58
Inoz2000

Цитата:
Что даст её включение?
Ничего. Она нужна для только Проводника. Но BHO общие для Windows Explorer и Internet Explorer, и поэтому Internet Explorer предлагает ее включить. Пока я не знаю, как отключить мое BHO ее для IE, что бы этого сообщения не появлялось.


Добавлено:

Цитата:
А на сайте написано версия 160
Я пока особо за сайтом не слежу.
Автор: Inoz2000
Дата сообщения: 25.07.2015 23:15

Цитата:
Пока я не знаю, как отключить

Отследить изменения, которые происходят, когда пользователь просто закрывает сообщение в IExplore.

Я заметил, что если есть запись в реестре

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Settings\{095A8667-F957-45D3-A40D-829390AB7E83}]
"Flags"=dword:00000040


, то сообщение не появляется.
ИМХО, этот Flag надо обязательно вписывать при установке. (Чтобы сообщение не появлялось)

Если включить надстройку, а после выключить её, то в проводнике не работает установка плагинов wcx. Чтобы она работала, надо или никогда не включать эту надстройку (Flags 40), или держать её всегда включённой.
При удалении программы, эти записи в реестре не удаляются.


Добавлено:
Лучше бы не удалялись настройки.
Автор: Aniskin
Дата сообщения: 25.07.2015 23:56
Inoz2000

Цитата:
то сообщение не появляется
Вроде бы нашел другое решение. Обновил дистрибутив. Попутно пофиксил еще пару некритических ошибок.
Автор: Inoz2000
Дата сообщения: 26.07.2015 00:47
Конечно, такое решение "в самую точку". Всё описано человеческим языком - NoInternetExplorer и никаких флагов не надо.
Теперь нельзя включить отключенный ранее BHO (кроме меня это никто не заметит)

При выборе метода сжатия LZMA, максимальное число потоков должно быть ограничено 2. Больше метод не поддерживает.
Автор: Aniskin
Дата сообщения: 26.07.2015 00:53

Цитата:
При выборе метода сжатия LZMA, максимальное число потоков должно быть ограничено 2. Больше метод не поддерживает.
Спасибо, исправлю.


Добавлено:

Цитата:
Больше метод не поддерживает.
Сам 7zip в диалоге настроек в формат zip с методом сжатия LZMA предлагает количество потоков от 1 до 4. Это ошибка, или так задумано?
Автор: Inoz2000
Дата сообщения: 26.07.2015 01:23

Цитата:
формат zip с методом сжатия LZMA предлагает количество потоков от 1 до 4

у меня от 1 до 8. так же и при PPMd в формат zip.
но я - про формат 7z
Автор: Aniskin
Дата сообщения: 26.07.2015 01:31

Цитата:
но я - про формат 7z
Я понял. Мне просто не ясно, 2 для LZMA - это ограничение метода сжатия в целом или ограничение метода сжатия только для формата 7z. В моем понимании LZMA - это просто алгоритм, его реализация что для 7z, что для zip должна быть одна. И не ясно, почему для 7z есть ограничение, а для zip нет.
Автор: Inoz2000
Дата сообщения: 26.07.2015 01:59
Моё имхо такое:
По идее, алгоритм PPMd - однопоточный. Если, при сжатии в zip, выбрать хоть 8 потоков, то на моём 4-ядерном процессоре упаковка даст нагрузку ~25%. Это даёт основания предполагать, что сжатие идёт в один поток.
Так же точно в случае с LZMA - нагрузка на процессор не превышает 50%. Значит всё сходится.

Цитата:
2 для LZMA - это ограничение метода сжатия
да. именно поэтому был создан LZMA2
Автор: Aniskin
Дата сообщения: 26.07.2015 02:03

Цитата:
да. именно поэтому был создан LZMA2
Ок, тогда почему

Цитата:
Сам 7zip в диалоге настроек в формат zip с методом сжатия LZMA предлагает количество потоков от 1 до 4. Это ошибка, или так задумано?
Автор: Inoz2000
Дата сообщения: 26.07.2015 02:06
всегда сжимал в zip методом deflate, чтобы не было проблем при распаковке (в том чиле из-за стандартного CompressedFolder-а, который не может распаковывать такие архивы)


Цитата:
Это ошибка, или так задумано?

При выборе большего числа потоков, в диалоге создания архива увеличивается и потребляемая память. НО РЕАЛЬНОЕ ПОТРЕБЛЕНИЕ ПАМЯТИ соответствует 1 потоку PPMd и 2 потокам LZMA.

Вывод. Конечно же это ошибка.
Автор: Inoz2000
Дата сообщения: 26.07.2015 19:00

Цитата:
НО РЕАЛЬНОЕ ПОТРЕБЛЕНИЕ ПАМЯТИ соответствует 1 потоку PPMd и 2 потокам LZMA.

Я так понял, что это верно лишь при сжатии одного файла.
Видимо, при архивировании наскольких файлов в zip, происходит независимое сжатие каждого файла. Тогда чем больше потоков, тем больше памяти требуется и больше нагрузка на прцессор.
Ещё раз повторю:
Цитата:
всегда сжимал в zip методом deflate
Автор: Inoz2000
Дата сообщения: 09.08.2015 14:05

Цитата:
В основе TC4Shell лежат библиотеки 7z.dll и unrar.dll
Получается, что unrar кагбы и не нужен теперь
Автор: Aniskin
Дата сообщения: 09.08.2015 14:44

Цитата:
Получается, что unrar кагбы и не нужен теперь

Спасибо за ссылку, буду сравнивать работу unrar и 7z.
Автор: ffffjjjj
Дата сообщения: 09.08.2015 22:36

Цитата:
Получается, что unrar кагбы и не нужен теперь


А если в раре обновление произойдёт, ждать нового 7zip-a и прикручивать обратно unrar ?
А потом когда 7zip поспеет опять откручивать unrar и прикручивать 7zip ?
Автор: Aniskin
Дата сообщения: 09.08.2015 22:46
ffffjjjj

Цитата:
А если в раре обновление произойдёт, ждать нового 7zip-a и прикручивать обратно unrar ?
А потом когда 7zip поспеет опять откручивать unrar и прикручивать 7zip ?

На самом деле, прикрутить или открутить unrar для меня дело 1 минуты. Если я решу отказаться от unrar, то это не обозначает, что я тут же удалю все наработки с unrar. В моем коде по сути будут меняться всего лишь две строчки. Одна включает/выключает unrar, вторая включает/выключает обработку rar архивов с помощью 7z.dll.
Автор: ffffjjjj
Дата сообщения: 09.08.2015 23:21
Aniskin

Да это всё понятно, что технически оно дело одной булевой переменной.
Просто это как-то не масштабно и не практично.
Ведь если использовать unrar то если что случится юзер сам может произвести апдейт этой либы и ехать дальше.

Добавлено:
А вот сделать как опцию чем распаковывать, это уже неплохо.

Добавлено:
если у 7z есть преимущество.

Страницы: 12345678

Предыдущая тема: дубль


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.