Pull to refresh

Побеждаем ELMS Delivery Client

Reading time3 min
Views2K
Сначала объясню, о чем речь.
Что такое ELMS? ELMS (e-academy License Management System) — это веб-сайт для распространения ПО, который каждый администратор программы может настроить в соответствии с потребностями своего подразделения. Факультеты-подписчики MSDN Academic Alliance всего мира могут пользоваться ELMS бесплатно, так что ее использование не приведет к дополнительным затратам.

Зачем нужна ELMS? ELMS — это основанная на веб-технологиях система управления, упрощающая распространение ПО среди студентов в соответствии с политикой лицензирования программы MSDN AA.
Ссылка

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

Я столкнулся со следующими недостатками системы:

1. Файл качается в один поток и довольно медленно.
2. При обрыве соединения клиент нужно перезапускать вручную, а происходит это довольно часто.
3. Далеко не всегда закачка возобновляется с того процента, на котором оборвалась.
4. Часто происходят непонятные повреждения файла при закачке, из-за которых файл, докачавшись полностью, не проходит проверку CRC и смело удаляется Delivery Client-ом.

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

Гугление подсказало, что такое поведение может быть вызвано повреждением файла на сервере или кривостью работы Delivery Client. Посколько с первой проблемой мы ничего сделать не сможем, попробуем устранить вторую.

Эксперименты проводились в Windows 7 и Windows XP SP3.

Для начала нам нужно узнать url скачиваемого файла. Я воспользовался для этого программой Wireshark. Я ей раньше не пользовался, поэтому алгоритм может быть неоптимальным.

1. Заказываем нужный продукт на сайте MSDN AA и скачиваем Delivery Client.
2. Закрываем все ненужные программы, использующие сеть.
3. Запускаем Delivery Client, выбираем папку для закачки.
4. Открываем Wireshark. В разделе «Capture» стартовой страницы выбираем основной сетевой интерфейс.
5. В Delivery Client нажимаем кнопку. Ждем, пока начнется загрузка (появится надпись «1%»).
6. Закрываем Delivery Client.
7. В Wireshark нажимаем Capture — Stop.
8. Сортируем список пакетов по колонке Protocol.
9. Ищем HTTP-пакеты, в колонке Info у которых значится GET и далее url, оканчивающийся на ".sdc". Таких запросов может быть несколько.
10. Выбрав пакет, разворачиваем в нижней части окна секцию Hypertext Transfer Protocol. Нам нужна первая строчка (GET) и заголовок HOST. Их мы копируем (правой кнопкой мыши — Copy — Value), удаляем служебные символы и ставим значение HOST перед значением GET.

У нас получилась ссылка. Если ее вставить в браузер, должна начаться загрузка файла с расширением sdc. Если файл большой, он бьется на несколько, они будут оканчиваться на ".01.sdc", ".02.sdc" и т.п. Кажется, файлы делятся по 2 Гб.

Теперь скачиваем файлы любимым менеджером загрузок, поддерживающим закачку в несколько потоков (у меня получился прирост скорости в 10 раз).

Если файл был один, просто кладем его в папку, которую вы указали Delivery Client (по умолчанию C:\Temp).

Если файлов было несколько, нужно сначала их склеить командой copy в консоли:
copy /b file.01.sdc+file.02.sdc result.sdc
Затем положить результат в папку загрузки Delivery Client и дать ему имя первого из файлов: file.01.sdc (файл с таким именем должен был создать сам Delivery Client при первом запуске).

После запуска Delivery Client найдет наш файл и сразу начнет его распаковывать. Наша цель достигнута.
Tags:
Hubs:
Total votes 19: ↑15 and ↓4+11
Comments4

Articles