Pull to refresh
7
0.5

Пользователь

Send message
Extentions указывается так

[Extentions]
rar,zip,7z


Но вы правы, перенесу в Options.
И в том архиве что поставляется хорошо бы указать все возможные параметры с комментариями.
ok
И почемуто с 7zip не работает на Win 7 x64
Ну наверно потому, что параметры командной строки не подходят. Секция называлась [WinRar] не спроста — я, ибо ленивый, дал возможность только указать место, где лежит winrar.

Все замечания завтра постараюсь поправить.
Двач 2.0? Коллективные блоги /bb/ и /rf/ есть?
А куда надо? Я могу и инсталлятор сделать, если нужно.
Прогресс бар бы все таки не помешал, или хоть какоето оповещение: Началась распаковка, Успешно распакован, Ошибка, и т.д.

Мне кажется это лишним. Программа должна работать незаметно для пользователя. Я скачал архив — пошел в папку — посмотрел содержимое. А так, что-то всплывает, мигает, рассказывает о своих ошибках и успехах, забирает фокус — мне такие программы не очень нравятся.
И да, еще, [WinRar] это както не правильно :) Заменить бы на [Архиватор] и в том же разделе указывать параметры было бы неплохо

Ну это можно =) Изначально параметры не стал выносить, т.к. хотелось сделать конфиг простым.
Простите, о какой проблеме идет речь?
Ну это же разные вещи. Я говорю про то, что в консоли у меня больше возможностей управления системой, чем в UI и это на мой взгляд не правильно в рамках windows-way, а вы говорите про установщик.
Будет ли данный сервис дорабатываться?
Будет, если это будет кому-то нужно.
Хотелось бы еще опцию автоудаления (если ее нет).
Сейчас залил новую версию и исходники по мотивам(ссылка в статье):
  1. Добавлена опция автоудаления. По умолчанию автоудаление отключено.
    [Options]
    Autodelete = yes
  2. Сделана многопоточная обработка — если скачалось много архивов, они начинают распаковывать параллельно.
  3. Сделана простая защита от рекурсивных архивов — если архив распакован, повторная распаковка может быть запущена только через 10 минут.
Да нет, я знаю как сделать установщик. Батник я сделал потому что:

1) Так было проще
2) Хотел показать(может кто не знает), как пользоваться sc.

А вопрос был про то, как мне уже существующие сервисы, как админу, удалить с компа.

Потому что незачем, если коротко. Установить сервис — задача того, кто его поставляет.

Ну во-первых раз у меня возник этот вопрос, значит case есть. Во-вторых, если «задача того, кто его поставляет», чего же тогда в sc у меня есть возможность снести или добавить любой сервис, который мне не нравится? По сути я говорю об отсутствии UI к команде sc(вернее к тому API, который она дергает).
В .net есть специальный компонент для этого, который автоматически создается в проекте при создании проекта сервиса

Вы не правильно поняли вопрос. Я спрашиваю почему в консоли services.msc я не могу создать или удалить сервис, хотя могу сделать это через командную строку.
Плюс сервиса в автозагрузке и подъеме системой в случае падения. Ну и к сессии пользователя они не привязаны. Я конечно еще тот знаток никсов, но мне казалось, что если проводить аналогию, это должен быть демон, прописанный в /etc/rc.local и кроновская таска, которая будем за ним следить, поднимая когда он упадет, разве нет? Ну и с точке зрения использования, мне было бы удобнее прописать пути в одном конфиге, чем запускать скрипт из нескольких папок.

Опять же, возможно я не прав, но разве эта команда — unp * — не будет каждый раз, когда мы скачаем новый архив, перераспаковывать заново все уже существующие архивы в папке?
во вложенных папках архивы не распаковывать?


Ну я об этом и написал «Ну или отказаться от автораспаковки вложенных архивов.». Но опять же, в нормальной работе(где мы не скачиваем рекурсивные архивы), это может считаться недостатком.

После распаковки в альтернативный поток добавлять метку о том что файл распакован автоматом и больше не распаковывать


Хм. Так я же и написал про «запрещать повторную распаковку». Это может быть плохой вариант — например, я скачал архив, он распаковался, все хорошо. Прошло полгода, я обо всем забыл, заново качаю архив, но в другую папку(которая тоже мониторится). У меня ничего не распаковалось — я пишу разработчику багу. Можно, конечно, ограничить время жизнь хранения хэша архива — например один час. Но все равно, потенциально проблема есть.
Боюсь, что защиты нет. Я думал над этим — можно считать хэш-архива и запрещать повторную распаковку, но в некоторых случаях это будет багом для пользователя. Еще можно проанализировать структуру архива на предмет наличия таких бомб, но это уже совсем другой уровень сложности, может позже, когда будет время и желание покопаться в разных форматах архивов. Ну или отказаться от автораспаковки вложенных архивов.
Надо еще сделать так, чтобы он удалял архив после распаковки.

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

Ну если в архиве лежит папка, то будет в результате папка с подпапкой — имя_архива/имя_подпапки. Так же, как если через контекстное меню распаковать.
Там бы еще неплохо многопоточную обработку вотчера прикрутить, чтобы не подвисало в ожидании закачки, но пока пользователей(а пока пользователь только я=)) все и так устраивает.
Хороший вопрос. Я это предусмотрел — в обработчике FileSystemWatcher файл пытается открыться на чтение. Если он еще загружается — получаем эксепшен(виндовая ошибка ERROR_SHARING_VIOLATION). Прога уходить в слип на секунду, после чего пытается еще раз открыть ну и т.д. Если за установленое количество попыток ничего не получилось — оставляем архив в покое, пусть кто-нибудь другой разбирается. Для себя количество попыток я установил до дури(int.MaxValue), вы можете поставить другое значение.

Собственно код вы можете найти в функции WatcherHandler
IOUtils.WrapSharingViolations(() => { using (File.OpenRead(file));}, null, int.MaxValue, 1000);

* This source code was highlighted with Source Code Highlighter.

И в утилитном класс IOUtils, там, правда, немного мутно из-за необходимости отличать ERROR_SHARING_VIOLATION в IOException от остальных ошибок доступа.
Надо написать Медведеву, чтобы он оплетал рудник и пускал пезантов на раш.
А если не секрет, почему?
Извиняюсь, промахнулся с кнопкой. Еще раз с нормальным форматированием.

но если такая необходимость встанет, то только Coded UI Test.

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

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

Ну простой пример был выбран для удобства демонстрации тестов. В реальной жизни я занимался автоматизацией тестирования UI достаточно сложной системы(что-то типа CADa) и могу сказать, что главное проблемы начинается на тестировании граничных условий. Например вам нужно проверить попап, который возникает при отсутствии свободного места на диске. Как вы будет делать на это автоматический тест силами только Code UI?
это действительно не надо писать. Экономим время.

Безусловно, поэтому я и отметил рекорде как плюс.
каждый программист делает 1 ошибку в 10 строках кода и это нормально.

Вообще вы как-то утрировали. Ошибки часто делают при описании логики. Делать уровня выполнения при написании 10 ассертов — ну это надо быть талантом. А от опечаток и прочего хорошо защищает статический анализ того же решашрпера. Вообще же речь шла о командах, которые уже используют TDD, пишут регрешен тесты и т.д. Для такие команд написание еще и тестов для UI не стане шоустопером.
при вариации тестов — переписывание заново.

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

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

Автоматизированное тестирование не противопоставляется ручному, а дополняет его. Чтобы те же тестеры не проходили одни и теже тесткейсы по 100 раз.
но если такая необходимость встанет, то только Coded UI Test.

Ну если со стоимостью проблем нет, то выбор действительно неплохой.
не нужно объяснять каждому разработчику, зачем писать полотенце тестов в дополнение к программе.
Не очень понял этот момент. А проблем с объяснением зачем писать модульные тесты не возникает?
вы рассмотрели простейший случай, а гуя могут быть достаточно сложным, да как правило так оно и есть
Ну простой пример был выбран для удобства демонстрации тестов. В реальной жизни я занимался автоматизацией тестирования UI достаточно сложной системы(что-то типа CADa) и могу сказать, что главное проблемы начинается на тестировании граничных условий. Например вам нужно проверить попап, который возникает при отсутствии свободного места на диске. Как вы будет делать на это автоматический тест силами только Code UI?
это действительно не надо писать. Экономим время.
Безусловно, поэтому я и отметил рекорде как плюс.
каждый программист делает 1 ошибку в 10 строках кода и это нормально.
Вообще вы как-то утрировали. Ошибки часто делают при описании логики. Делать уровня выполнения при написании 10 ассертов — ну это надо быть талантом. А от опечаток и прочего хорошо защищает статический анализ того же решашрпера. Вообще же речь шла о командах, которые уже используют TDD, пишут регрешен тесты и т.д. Для такие команд написание еще и тестов для UI не стане шоустопером.
при вариации тестов — переписывание заново.
Ну изменение продакшен кода конечно может привести к необходимости поменять тесты. Но это абсолютно логично для все автоматического регрешен тестирования вообще. И code ui вас тут не спасет — я удалил часть кнопок, поменять часть контролов, значит надо перезаписать тесты.
Если нужно потратить день, чтобы написать тест к окну, то лучше оттестировать вручную
Нет не лучше, т.к. потом после каждой итерации надо будет снова потратить день на ручное тестирования этого окна. Не знаю какой опыт у вас, а я не однократно встречался с ситуацией, когда на одной итерации ломали функционал, сделанный на предыдущих.
тыкают куда не попадя и пишут что не попадя, так что есть шанс отловить ошибку ввода данных
Автоматизированное тестирование не противопоставляется ручному, а дополняет его. Чтобы те же тестеры не проходили одни и теже тесткейсы по 100 раз.
А какая статистика современного Fidonet'а? Сколько там пользователей, там есть кто-то кроме Мицгола?

Information

Rating
2,100-th
Location
Саха (Якутия), Россия
Date of birth
Registered
Activity