Wednesday, November 25, 2009

iTunes and VMware ThinApp

Попытайтесь представить себе, что вы смотрите как отражается свет от поверхности HDD platter:

66 KB

Но тут с огорчением чувствуете, как ваш организм перестает вас слушаться и происходит вот такое:

иэ... иэ... иэ... ыыыээаАПЧХИи.

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

Именно так, мне кажется, поступает с диском боготворимая iTunes--по крайней мере, та ее версия что работает (huh?) под Windows.

Старательность и тщательность, с какой iTunes загаживает систему в случайных местах, напоминает усердие жл^H^H провинциала, гребущего себе домой кретиноскоп размером с гаражные ворота, хрусталь и картину "Вечер у березы" в венецианской смальтовой раме с мозаикой.

Можно, разумеется, ставить iTunes в VM, но есть еще один способ дополнительно не засорять вашу неуютную Windows.

Application Virtualization

У VMware, например, есть ThinApp, на выходе из которого можно получить завернутый в 2 файла iTunes package, который:

  • переписывается в любое место обычного пользователя (не требует официально установки и какого-либо дополнительного ПО);
  • iTunes все скачанное держит в том же каталоге, что и сидит само;
  • все записи в реестр, любые каталоги (кроме одного)--запрещены и при этом сам iTunes о таких запретах не имеет ни малейшего понятия;
  • перенос каталога с iTunes на другую машину выглядит как копирование 1 каталога: все настройки и проч. сохраняются;

Понятно, что такие фокусы ThinApp может провернуть с практически любым диплодоком.

Выглядит интересующий нас каталог вот так:

14 KB

Где 6 сотен мегабайт в файле Bonjour.dat + 3 мегабайта iTunes.exe составляют все что нужно конечному пользователю. Каталог Bonjour--это виртуальная файловая система (и единственное место, куда разрешено писать), что рождается после 1-го запуска iTunes.exe.

cmd.exe, iexplore.exe и regedit.exe нужны только для debugging; если пустить, например, cmd.exe тогда можно смотреть на свою реальную файловую систему, на которую "наложена" виртуальная: какой вид есть то, как себе представляет ситуацию в текущий момент аппликация подготовленная ThinApp'ом.

Например, из такого специального cmd.exe:

c:\>dir "c:\Program Files\iTunes"
 Том в устройстве C не имеет метки.
 Серийный номер тома: DC4B-8921

 Содержимое папки c:\Program Files\iTunes

11/24/2009  11:17 AM    <DIR>          .
11/24/2009  11:17 AM    <DIR>          ..
11/12/2009  04:32 PM            59,083 Acknowledgements.rtf
11/24/2009  11:17 AM    <DIR>          CD Configuration
11/12/2009  04:33 PM           722,160 CDDBControlApple.dll
11/12/2009  04:33 PM           648,480 iPodUpdaterExt.dll
11/12/2009  04:33 PM           111,912 ITDetector.ocx
11/12/2009  04:33 PM        14,769,448 iTunes.dll
11/12/2009  04:33 PM        10,358,048 iTunes.exe
11/24/2009  11:17 AM    <DIR>          iTunes.Resources
11/12/2009  04:33 PM           384,800 iTunesAdmin.dll
11/12/2009  04:33 PM           211,232 iTunesHelper.dll
11/12/2009  04:33 PM           141,600 iTunesHelper.exe
11/24/2009  11:17 AM    <DIR>          iTunesHelper.Resources
11/12/2009  04:33 PM           124,192 iTunesMiniPlayer.dll
11/24/2009  11:17 AM    <DIR>          iTunesMiniPlayer.Resources
11/12/2009  04:33 PM           294,688 iTunesOutlookAddIn.dll
11/12/2009  04:33 PM           292,640 iTunesPhotoProcessor.exe
11/24/2009  11:17 AM    <DIR>          Mozilla Plugins
                              12 файлов     28,118,283 байт
                               7 папок  13,800,427,520 байт свободно

То же, но из "настоящего" cmd:

c:\>dir "c:\Program Files\iTunes"
 Том в устройстве C имеет метку Vista
 Серийный номер тома: 9832-7A28

 Содержимое папки c:\Program Files

Файл не найден

How to create an iTunes package

  1. Выбираете OC, под которую предполагается использовать созданный package и делаете clean install ее в VMware Workstation или еще где.

    iTunes здесь имеет особенность: сделанный package в виртуальной XP потом отказался работать на Vista. Приблизительно такой же эффект можно получить, если накатить на XP (с установленным iTunes) Vista и запустить потом iTunes, которая тяжело ругнется и нагло потребует repair.

    (Btw, собранный package под Windows 7 счастливо заработал на Vista.)

  2. Добавляете в VM виртуальный диск, который не зависит от снапшотов (persistent). То есть у вас VM должен иметь 2 диска: на 1-м сидит Windows, а 2-й пока пустой.

  3. Ставите в виртуальную машину ThinApp. Выключаете VM. Создаете Snapshot.

  4. Включаете VM и запускаете утилиту ThinApp Setup Capture.

  5. Сканируете ей систему.

  6. Ставите iTunes. Setup Capture продолжает висеть в памяти, записывая (на 2-й диск VM, который persistent) весь непростительный harm, который вы наносите этой установкой.

  7. Опять сканируете систему с помощью Setup Capture--уже после инсталляции iTunes.

  8. Делаете Revert to Snapshot.

  9. Build'ите package.

  10. Тестируете его и радуетесь. Если что не работает, идете в п.3 (чаще п.8) и так до просветления.

Вся тонкость находится в п.8: как именно построить package, чтобы он а) был безопасен (не писал, куда ему хочется) б) работал.

Документация у ThinApp достаточно приличная, так что упомяну только ключевые моменты.

  • Будьте внимательны к тому, куда пойдут файлы Virtual File System: в каталог с package или куда-то в c:\users\bob\thinapp. Тут дело вкуса.
  • File System Access ставьте в WriteCopy. С режимом Full плюгавый iTunes не разговаривает.
  • Перед сборкой найдите все файлы ##Attributes.ini, в которых есть строчка DirectoryIsolationMode=Merged и поменяйте ее на DirectoryIsolationMode=WriteCopy (таких файлов будет 3 штуки).

FAQ

Q00:

Package у меня выдает при запуске, что "The registry settings used by iTunes for importing and burning CDs and DVDs are missing". Что делать?

A:Если вы пишите DVD посредством iTunes (зачем?)--расстраивайтесь, иначе--игнорируйте.
Q01:

iTunes запускается через пень-колоду: один раз нормально, а в во второй, процесс itunes.exe набирает в рот памяти и больше ничего не хочет делать.

A:ThinApp имеет утилиту dll_dump.exe, которая покажет PID'ы всех процессов от старых запусков iTunes. Грохните их.

No comments:

Post a Comment