Автор: Astra55
Дата сообщения: 01.07.2013 21:06
Поскольку "знаток виндовых утилит" начал вместо нормального "Дяденьки, научите, я еще неопытный!", переводить стрелки куда попало и искать причины кривости сборки во всем и всех, кроме себя, то и отношение к нему было соответствующее. Надеюсь, будет полезно рассмотреть косяки его сборки ExtremeCopy Pro (далее для краткости ECP), поскольку они типичные. Таких косяков было, есть и будет еще очень много. Причина, банальная до отвращения - нежелание читать и рассуждать. Итак, первый снапшот, запуск инсталлятора ECP, регистрация серийником, мелкие настройки, второй снапшот. Проект создан, начинаем, в отличие от, думать и прикидывать как должна вести себя подобная программа после виртуализации. В виндах всего три системные папки - Documents and Settings, Windows и Program Files. Первая в ThinApp разделяется на %AppData%, %Common AppData% и %Local AppData%, вторая на %SystemRoot% и %SystemSystem%. ECP должна копировать файлы и папки откуда угодно и куда угодно, поэтому необходимо удалить папки по максимуму, оставив только реально необходимые и изолировать только файлы самой программы. После инсталляции, файлы ECP находятся в:
%AppData%/ExtremeCopy/genflpui.dat - файл лицензии, который не удается никуда переместить;
%ProgramFilesDir%/Easersoft/ExtremeCopy/ - основные файлы и папка языков;
%SystemSystem%/msvcp100.dll, msvcr100.dll - библиотеки VC++
В принципе, можно было бы оставить %ProgramFilesDir%, удалив атрибутный файл из корня, но пусть будет открытость по максимуму. Создаем в корне проекта папку %Drive_C% и перемещаем туда все из /Easersoft/ExtremeCopy/. Перемещаем обе VC++ дллки в директорию самой программы. Остальные папки безжалостно удаляем. Таким образом, в проекте остается всего две папки %AppData% и %Drive_C%. Файлы изоляции ##Attributes.ini с содержимым DirectoryIsolationMode=Full находятся рядом с файлом лицезнии genflpui.dat в %AppData%, в директории %Drive_C%/Easersoft/ExtremeCopy/, где лежат все файлы программы и в папке языков Language, всего три файла. Больше ничего изолировать не надо, система максимально открыта, поскольку программа не создает никаких дополнительных файлов при работе, файл конфига лежит в директории ECP. Остался завершающий штрих в виде исправления путей в реестре с %ProgramFilesDir% на %Drive_C%. Можно было бы удалить все, связанное с Shell, поскольку интеграция не используется, но в данном случае это некритично, пусть остается как есть. Никаких изоляций для директорий типа Merged делать не нужно. Логика очень простая - если изоляция не нужна, а в данном случае это именно так, лучше ее не применять, если папка не используется, лучше ее удалить. Как отличить нужное от ненужного? Опытом, логикой, а также методом проб и ошибок.