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

» WinRAR (часть 2)

Автор: Inoz2000
Дата сообщения: 09.10.2014 01:01
кстати о справке
Цитата_1WinRAR пытается найти регистрационный ключ и файл settings.reg как в %APPDATA%\WinRAR, так и программной папке WinRAR, но первой в очереди стоит %APPDATA%\WinRAR.
Автор: Pasha_ZZZ
Дата сообщения: 09.10.2014 02:14
Inoz2000
Цитата:
это непривично, и непонятно зачем существует опция Global\AppData=0
ини-файл с опциями всегда надо около программы сначала искать... а значение вышеуказанной опции ВинРАР будет читать тоже сначала из АппДата?
Автор: Inoz2000
Дата сообщения: 09.10.2014 09:22

Pasha_ZZZ

Цитата:
.. а значение вышеуказанной опции ВинРАР будет читать тоже сначала из АппДата?
Запрет использовть папку %AppData% означает, что USB-WinRAR не создаст в ней файл version.dat или протокол ошибок?
Для чего ещё этот запрет? - Чтобы запретить читать rarreg.key из %appdata% - сомневаюсь;
rarfiles.lst или темы? - уверен, что для переносного портабельного варианта они не пригодятся.
так для чего?

Добавлено:
RarSmall.bmp и Rar.ico записываются в ini с абсолютными путями, это не применимо при переносном использовании

Добавлено:
По поводу экспорта
Пользователи уже сбиты с толку, потомучто winrar говорит 'Параметры winrar сохранены в Settings.reg', хотя на самом деле файл даже не создаётся
Автор: EugeneRoshal
Дата сообщения: 09.10.2014 10:38
pikorembo

Цитата:
Т.е. Вы считаете, что нужно просто отменить операцию и не сообщить об этом пользователю?

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

Цитата:
Заявлена поддержка UAC. При этом допускается возможность неполной распаковки архива.

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

Либо в начале распаковки каждого архива делать дополнительный проход и анализировать все содержащиеся в нем каталоги, которых могут быть сотни и тысячи, на предмет наличия на диске и их прав доступа.

Жертвовать безопасностью или скоростью ради достаточно искусственного сценария использования, который вряд ли часто встретится на практике, считаю неоправданным.

Добавлено:
Inoz2000

Цитата:
непонятно зачем существует опция Global\AppData=0 ???

Чтобы ничего не писать и не читать в %appdata%\WinRAR на чужом компьютере, на который мы пришли с внешним накопителем. В такой ситуации подхватывать чужие настройки из %appdata% нам незачем, а писать в чужой %appdata% нельзя.

Цитата:
Не лучше ли, если WinRAR будет в первую очередь работать с ini-файлом в папке %AppData%\WinRAR, как он это делает со всем вышеперечисленным.

Наши собственные настройки на usb диске должны иметь приоритет перед чужими в %appdata%. Кто-то может решить хранить настройки в %appdata%\WinRAR\winrar.ini вместо registry для копии, установленной локально на жестком диске, но если мы пришли к нему со своим внешним диском, нам его настройки не нужны.

Цитата:
RarSmall.bmp и Rar.ico записываются в ini с абсолютными путями, это не применимо при переносном использовании

При переносном использовании нам эти файлы не нужны. Мы ведь не собираемся регистрировать свои shell extension или файловые ассоциации на чужом компьютере, если мы пришли туда с внешним диском.

Цитата:
Пользователи уже сбиты с толку, потомучто winrar говорит 'Параметры winrar сохранены в Settings.reg', хотя на самом деле файл даже не создаётся

В смысле, у вас в 5.20 не работает "export settings to file"? Я сейчас проверил, у меня settings.reg создается.
Автор: pikorembo
Дата сообщения: 09.10.2014 11:22
EugeneRoshal

Цитата:
А наличие в системе такого процесса, работающего долго и готового молча отрабатывать все запросы на файловые операции, сомнительно с точки зрения безопасности.

Я посмотрел вашу реализацию, она вполне применима в данном случае. Именно о таком варианте я и думал раньше. Никаких проблем с безопасностью не будет, потому что ничего в целом менять не придется. Нужно только слегка модифицировать текущую версию.

В WinRAR 5.20 beta 1 распаковка архива выполняется одним процессом от и до. Нужно переделать алгоритм так, чтобы распаковку делали 2 процесса. Сначала процесс-1 пытается распаковать архив в указанный каталог. Допустим, он смог распаковать 7 файлов, а на 8-м файле спотыкнулся.

Тогда он вызывает окно UAC. Если пользователь разрешил повышение привилегий, процесс-1 запускает процесс-2 и сообщает о том, сколько файлов уже распаковано, и их нужно пропустить. Если пользователь запретил повышение привилегий, процесс-1 продолжает распаковку архива с выводом ошибок доступа.

Как видите, в предложенном мной способе никаких дополнительных команд на выполнение элементарных файловых операций 2-й процесс получать не будет, а значит воспользоваться этим программа-злоумышленник никак не сможет. И волки сыты, и овцы целы
Автор: EugeneRoshal
Дата сообщения: 09.10.2014 13:20
pikorembo

Цитата:
Если пользователь разрешил повышение привилегий, процесс-1 запускает процесс-2 и сообщает о том, сколько файлов уже распаковано, и их нужно пропустить.

В принципе реализуемо, но тогда вместо одной проверки в начале распаковки нужно в каждом из 15 поддерживаемых WinRAR форматов нужно делать проверки на сбои при создании файлов и каталогов, а в RAR и TAR, и hardlinks с symlinks, и процедуру пропуска N файлов. Объем кода на 2 порядка больше. И передавать информацию только о количестве файлов скорее всего недостаточно. Пользователь мог как-то взаимодействовать с архиватором в ходе распаковки, надо передавать и историю взаимодействия - пароли, режим перезаписи файлов, может что еще, сходу не скажу. Например, историю ошибок (количество, коды). Кроме того, пропуск может занять или много времени в случае большого solid архива, или быть проблематичным, если у нас многотомный архив на сменных носителях.

Теоретически при вдумчивой реализации оно, возможно, так было бы аккуратнее. Но практически у нас есть выбор - написать за 5 дней код, который покрывает 95% сценариев использования. Или оценить объем работы для написания кода для 98% сценариев, решить, что лишнего месяца у нас нет и заняться чем-то другим.

Причем, даже если бы я реализовывал предлагаемый вами вариант, этап проверки каталога перед началом операции все равно нужен. Во-первых, он сразу определяет практически все реальные случаи использования UAC. Во-вторых, он работает не только для распаковки, но и для прочих операций с архивами. А насколько востребован второй этап, предлагаемый вами, покажет реальное применение 5.20 пользователями.
Автор: Inoz2000
Дата сообщения: 09.10.2014 20:54
EugeneRoshal

Цитата:
Наши собственные настройки на usb диске должны иметь приоритет перед чужими в %appdata%

как раз для этого случая и нужна опция запрета.
Цитата:
но если мы пришли к нему со своим внешним диском, нам его настройки не нужны.
мы можем придти с внешним диском не только к нему, но и к себе. У себя я предпочёл бы использовать свой ini из %appdata%, настроенный для себя. почему создавая на внешнем диске ini-файл для работы на чужом компьютере, я лишаю себя возможности пользоваться своими настройками на своём?
Цитата:
Мы ведь не собираемся регистрировать свои shell extension или файловые ассоциации на чужом компьютере
тогда я ничего не понимаю!
Вы считаете, что все подряд будут вписывать в свои winrar.ini строку Global\Integration=0 ?

Если да, в таком случае при создании ini-файла, проще будет автоматичеки запрещать обращение к %appdata% и к реестру.


Цитата:
Я сейчас проверил, у меня settings.reg создается.
и если в реестре отсутствуют записи
Что создаётся, пустой файл нулевого размера?
Автор: Skif_off
Дата сообщения: 09.10.2014 21:31
Inoz2000

Цитата:
мы можем придти с внешним диском не только к нему, но и к себе. У себя я предпочёл бы использовать свой ini из %appdata%, настроенный для себя. почему создавая на внешнем диске ini-файл для работы на чужом компьютере, я лишаю себя возможности пользоваться своими настройками на своём?

Любопытно, как программа должна понять, какой конкретно ini-файл вы желаете использовать прямо сейчас? И что о вас подумают, если вы своими настройкими загадите %appdata%?
Автор: Inoz2000
Дата сообщения: 09.10.2014 22:31

Skif_off
Цитата:
Любопытно, как программа должна понять, какой конкретно ini-файл вы желаете использовать прямо сейчас?
Странный вопрос. Из двух существующих файлов используется только один (согласно приоритету указанному в справке, Сначала WinRAR ищет этот файл в своей папке, а затем в %APPDATA%\WinRAR).
Я же предлагаю этот приоритет [more=изменить]Не лучше ли, если WinRAR будет в первую очередь работать с ini-файлом в папке %AppData%\WinRAR, как он это делает со всем вышеперечисленным.
А эта опция будет устанавливать приоритет наоборот, для файла winrar.ini на usb-накопителе, на котором winrar установлен 'для использования на разных ПК'[/more]

Цитата:
И что о вас подумают, если вы своими настройкими загадите %appdata%?
То же самое, что думали обо мне неделю/месяц/год назад , когда никакого WinRAR.ini не существовало.

PS скажите своё мнение по [more=этому]при создании ini-файла, проще будет автоматичеки запрещать обращение к %appdata% и к реестру.[/more] вопросу.
Автор: Benchmark
Дата сообщения: 09.10.2014 23:35

Цитата:
Не лучше ли, если WinRAR будет в первую очередь работать с ini-файлом в папке %AppData%\WinRAR, как он это делает со всем вышеперечисленным.
А эта опция будет устанавливать приоритет наоборот, для файла winrar.ini на usb-накопителе, на котором winrar установлен 'для использования на разных ПК'


Скажем так: если юзер скопировал winrar на usb и явно положил рядом с ним winrar.ini, значит он определенно хочет, чтобы при запуске с этой флешки настройки брались из этого ini, а не откуда-то ещё.
Автор: Inoz2000
Дата сообщения: 10.10.2014 01:04

Цитата:
значит он определенно хочет
в таком случае пусть он напишет в нём AppData=0 и это будет означать, что файл на флешке важнее. а то получается, что добиться возможности использовать уже существующие настройки из реестра или %appdata% можно только удалив с флешки этот файл.
Автор: Benchmark
Дата сообщения: 10.10.2014 03:03
Inoz2000

Цитата:
в таком случае пусть он напишет в нём AppData=0

Вот пусть тот, кто запускает "автономную" версию с флешки, но при этом за каким-то лешим хочет использовать не-автономный конфиг из %appdata%, пусть сам и прописывает AppData=1.


Цитата:
а то получается, что добиться возможности использовать уже существующие настройки из реестра или %appdata% можно только удалив с флешки этот файл

И это правильно. Раз юзер создал на флешке ini, значит явно перешел в автономный режим.

Автор: V0lt
Дата сообщения: 10.10.2014 05:54
Benchmark

Цитата:
Раз юзер создал на флешке ini, значит явно перешел в автономный режим.

Подписываюсь!

И никаких опций "AppData". Есть рядом с исполняемым файлом файл winrar.ini, значит настройки в нем, нет - брать настройки из системы.
Автор: Skif_off
Дата сообщения: 10.10.2014 06:59
Inoz2000

Цитата:
Я же предлагаю этот приоритет изменить

Benchmark и V0lt уже ответили, это если не стандарт, то правила хорошего тона для портативного софта.
Автор: Inoz2000
Дата сообщения: 10.10.2014 07:48

Цитата:
Раз юзер создал на флешке ini, значит явно перешел в автономный режим.

Цитата:
Подписываюсь!

И никаких опций "AppData"
Вот и получается, что пришли к общему знаменателю.
Суть которого я уже изложил выше
Цитата:
при создании ini-файла, проще будет автоматичеки запрещать обращение к %appdata% и к реестру.

И накаких опций AppData и Integration ! Начисто удалить их упоминание из справки! Забыть, как страшный сон


Оставить только Global\SaveSettings равное по умолчанию 1, а пользователь в любой момент уже сможет заменить его на 0.
В смысле, что эта строка должна автоматически создаваться. Тем самым исключатся ошибки написания, которые обязательно будут в связи с учётом регистра символов. Опечатка уже свершившийся факт
Автор: EugeneRoshal
Дата сообщения: 10.10.2014 10:33
Inoz2000

Цитата:
мы можем придти с внешним диском не только к нему, но и к себе. У себя я предпочёл бы использовать свой ini из %appdata%, настроенный для себя. почему создавая на внешнем диске ini-файл для работы на чужом компьютере, я лишаю себя возможности пользоваться своими настройками на своём?

На своем компьютере можно установить winrar.exe на жесткий диск и не запускать его с внешнего диска.


Цитата:
и если в реестре отсутствуют записи

Нет, из winrar.ini в .reg WinRAR экспортировать настройки не умеет.

V0lt

Цитата:
И никаких опций "AppData". Есть рядом с исполняемым файлом файл winrar.ini, значит настройки в нем, нет - брать настройки из системы.

"AppData" не управляет местоположением winrar.ini. Если рядом с winrar.exe есть winrar.ini, настройки всегда берутся из него, и я считаю это логичным. AppData и Integration нужны, чтобы запретить делать какие-либо изменения в %appdata% и registry. Я не сделал их 0 по умолчанию, потому что предположил, что некоторое количество пользователей может предпочесть использовать winrar.ini вместо registry и при установке WinRAR на жесткий диск своего компьютера. Какой вариант применения winrar.ini окажется более массовым, на внешнем или локальном жестком диске, мне сейчас сказать сложно.

Inoz2000

Цитата:
И накаких опций AppData и Integration ! Начисто удалить их упоминание из справки!

И как пользователям тогда контролировать эти параметры? На внешнем диске нужно одно поведение, на локальном - другое.


Цитата:
В смысле, что эта строка должна автоматически создаваться.

С этим согласен. Создавать их и правда можно автоматически.
Автор: Dandelion79
Дата сообщения: 10.10.2014 11:10
Можно с помощью Винрара осуществить следующее:

В директории есть 30 папок, в каждой из которых есть еще папки и файлы... На выходе необходимо получить 30 архивов (имя - по названию папки), отдельно для каждой папки в текущей директории с сохранением структуры дочерних папок и файлов.
Автор: Andarin
Дата сообщения: 10.10.2014 11:50
Dandelion79
Выделяете эти 30 папок, нажимаете добавить и далее - на вкладке "файлы" ставите галочку в чекбоксе "помещать каждый файл в отдельный архив"
Автор: Inoz2000
Дата сообщения: 10.10.2014 11:58
Dandelion79если проблема с
Цитата:
сохранением структуры дочерних папок и файлов.
на вкладке "файлы" укажите сохранять относительные пути. :)

Добавлено:

EugeneRoshal
В переходе на winrar.ini я вижу только плюсы. Главное преимущество, что настройки всегда автоматически сохраняются в файл. это полезно в случаях проблем с реестром и удобно, что не нужно экспортировать настройки самому. И если я начисто переустановлю систему или winrar, то настройки всегда будут надёжно храниться в профиле пользователя.
Скажите, как мне преобразовать reg-файл (более 2200 строк) в winrar.ini?
Автор: shadow_member
Дата сообщения: 10.10.2014 12:25
Официальный портабельный вариант- это круто!
При работе с hdd понятно. При работе с флешки как будет с ассоциацией, интеграцией, иконками в ней?
Автор: EugeneRoshal
Дата сообщения: 10.10.2014 12:43
Inoz2000

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

В целом - да, но полностью от registry все равно не уйти. Ассоциации файлов придется после переустановки настраивать заново. И регистрацию shell extension в системе.

Цитата:
Скажите, как мне преобразовать reg-файл (более 2200 строк) в winrar.ini?

Сейчас в WinRAR такой функции нет.

shadow_member

Цитата:
При работе с флешки как будет с ассоциацией, интеграцией, иконками в ней?

При наличии в winrar.ini "Global\Integration=0" - никак. При отсутствии - WinRAR позволит прописать ассоциации к exe на сменном диске.
Автор: shadow_member
Дата сообщения: 10.10.2014 12:54
EugeneRoshal
Ценность портабельной как раз при работе "на чужом компе", понял так, что ассоциации будут прописаны в реестре.
P.S.
Да, я так и понял, как вы написали ниже, что если прописать ассоциации, то это будет в реестре.
Автор: EugeneRoshal
Дата сообщения: 10.10.2014 13:15
shadow_member

Цитата:
Ценность портабельной как раз при работе "на чужом компе", понял так, что ассоциации будут прописаны в реестре.

Можно прописывать, можно не прописывать, в зависимости от желания пользователя.
Автор: Victor_VG
Дата сообщения: 10.10.2014 13:44
shadow_member

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

Я так считаю - хочешь чтобы на время работы с чужой машиной твоя личная рабочая среда была с тобой? Запихивай её в виртуалку или в Live! DVD/USB, пришёл и максимально вежливо! - "Можно мне на вашей машине со своей ОС загрузится? Ваша ОС на время моей работы будет выключена и никаких изменений в неё внесено не будет. Вам это не помешает?" и коли хозяин ответит НЕТ всё, своё желание скатать в трубочку и засунуть подальше ибо:

- заходя в кабинет говорите ЗДРАСТИ!, если вам ответят НЕТ! - сдерживайте страсти.

только так и никак иначе, и быть по сему.
Автор: lesnik38
Дата сообщения: 10.10.2014 17:29
Уважаемый EugeneRoshal
Цитата:
в дистрибутиве время = 21:32
Время меняется (21:32), когда смотрю через Total Commander v8.51a, Windows 7SP1x32
часовой пояс (UTC+8:00) Иркутск (RTZ 7), установлена галка "Автопереход на летнее время и обратно"
Обновление часового пояса KB2998527 от 22.09.14

Действительно WinRAR 5.20b1 показывает 22:32, и вроде можно грешить на TC, НО:
1. При упаковке другими архиваторам время не меняется. (22:32)
2. Если снять галку "Автопереход" или выбрать часовой пояс без нее, время тоже не меняется (22:32)
После возврата галки или часового пояса, смотрим архив через ТС, время опять не меняется (22:32)

То есть, создается впечатление, что ИМЕННО в момент упаковки WinRAR-ом и установленной галкой "Автопереход",
что-то не так с часовыми поясами.

Проверил на версии WinRAR 4.20 english (русскую не нашел на ftp), время тоже не меняется (22:32)
Получается, началось где-то с версий 5.х

Похожая тема про время: http://forum.ru-board.com/topic.cgi?forum=62&topic=26782&start=0
Автор: Victor_VG
Дата сообщения: 10.10.2014 18:21
lesnik38

Это проблема не Rar, а способов представления таймстампа в ОС. Я этот же эффект увидел после установки на JDK 8u20 tzupdater-1_4_7-2014g.zip с сайта Оракла на UNIX. Так что думайте.
Автор: lesnik38
Дата сообщения: 10.10.2014 18:31
Victor_VG
Цитата:
Это проблема не Rar, а способов представления таймстампа в ОС
Но тогда почему, при тех же условиях, в WinRAR 4.х нет этой проблемы?
И в других архиваторах нет, а только в WinRAR 5.x (не зависимо от формата архивирования: rar, rar5, zip)
Автор: Victor_VG
Дата сообщения: 10.10.2014 19:03
lesnik38

Rar 5.х (WinRAR 5.х) тут не при чём - он зовёт GetFileTime() из kernel32.dll (kernel64.dll), а та возвращает время в соответствии с настройками ОС. Так что ваш вопрос не по адресу. С этим в Микрософт пожалуйста ибо они так сделали, им и объяснять зачем, как и почему.
Автор: lesnik38
Дата сообщения: 10.10.2014 19:09
Victor_VG
Цитата:
Rar 5.х (WinRAR 5.х) тут не при чём - он зовёт GetFileTime() из kernel32.dll (kernel64.dll)
Согласен целиком и полностью.
Ну дык, значит WinRAR 4.х (и др.) при тех же условиях (ОС, и т.п.) не зовет эту функцию, а зовет другую функцию или эту же, но с другими параметрами.
Нельзя вернуть обработку времени файлов как было в WinRAR 4.х?
Автор: EugeneRoshal
Дата сообщения: 10.10.2014 19:41
lesnik38

Цитата:
Действительно WinRAR 5.20b1 показывает 22:32, и вроде можно грешить на TC

Насколько я понимаю, WinRAR при распаковке восстанавливает время правильно, то же, что и при упаковке? И в своей оболочке показывает время правильно? А проблема возникает только при просмотре архива сторонней программой? Тогда и правда можно грешить на стороннюю программу.

Цитата:
1. При упаковке другими архиваторам время не меняется. (22:32)

Так там формат архива другой. Следовательно и код чтения архива в TC другой, и формат хранения времени, возможно, другой.

Цитата:
Получается, началось где-то с версий 5.х

В 5.x я вместо FileTimeToLocalFileTime использую:

FileTimeToSystemTime
SystemTimeToTzSpecificLocalTime
SystemTimeToFileTime

рекомендованные MS в http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290%28v=vs.85%29.aspx

Кроме XP, правда. В XP эта последовательность дает погрешность в 1 час. А FileTimeToLocalFileTime, которая использовалась в 4.x, при определенных условиях (сейчас уже не помню детали), давала ошибку в тот же 1 час. Вообще, эта одночасовая погрешность из-за летнего времени постоянно где-нибудь проявляется. То файловые менеджеры отличаются на 1 час от Explorer, то функции работы с временем дают эту погрешность в зависимости от версии Windows. То у файлов время съезжает, как описано здесь: http://support2.microsoft.com/kb/129574

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160

Предыдущая тема: Прога для поиска картинок в интернете.


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