Как интегрировать в виндовс программы
Как вшить программу в дистрибутив Windows XP
(перевод статьи + небольшая отсебятина «How To Create New ProgramAddons»)
Доброго времени дня. Сегодня хочу вам рассказать о том , как сделать пакет с любимой вам программой и внедрить (интегрировать) его в дистрибутив собранной вами Автоматической установки Windows XP.Процесс этот несложный и не требующий каких –либо дополнительных умственных затрат. Итак поехали.
Полагаю у вас могут возникнуть вопрос по поводу того , для чего нужно вшивать программу в дистрибутив и лишить пользователя возможности выбора программы для установки. Отвечу так – что многие (или даже подавляющее большинство) делает Unattended XP исключительно под себя .Я тоже не исключение. И по мне, намного удобнее вшить в дистрибутив те программы которые мне необходимы, чем делать после дополнительные мышедвижения и возиться с постинсталлерами (такой уж я ленивый человек). Да и к тому же все жизненно важные программы и утилиты , такие как – антивирус , архиватор , антиспай и другие просто необходимо внедрять и устанавливать насильно … Надеюсь убедил .Хотя забыл еще один момент – это просто интересно и научиться этому несложно , так зачем же лишать себя такой возможности.
Итак у вас есть папка SVCPACK, в которую вы поместили перепакованный «тихий инсталл» и ini-файл ENTRIES_PROGRAMNAME.INI , он должен находиться вне папки SVCPACK . Теперь осталось только собрать все эти файлы в один CAB- файл. Сделать это можно командой makecab или любой программой умеющей сжимать файлы в CAB архив (например picozip или power archiver ) Я пользовался двумя способами командой makecab – правда пришлось попотеть и почитать (здесь ) .И второй способ – это плагин для TotalCommandera (забирать здесь )
У кого нет желания читать. Тогда повторяйте за мной. В папку с вашими заготовками поместите еще один файл (под любым коротким именем – cabm.txt) Содержание этого файла ниже :
1.С комментариями (ВАЖНО. ) – не копируйте этот листинг , при запуске команды на исполнение получите море ошибок. Приведен только для ознакомления.
Остается только в командной строке набрать makecab /f cabm.txt и понаблюдать за таким вот окошком.
И на выходе получается ABICAB.CAB.
Или же в TotalCommandere выделяем наши файлы ,нажимаем F5 выскакивает такой диалог
Жмем Enter и выбираем указанный на рисунке ключ в выпадающем списке второго диалога
И жмем Enter повторно. Возможно вылетит еще такое окошко
На него тоже отвечаем Enter-ом
Интеграция в дистрибутив полученного CAB файла осуществляется либо NLite
Потом добавляем CAB файл
И ждем. Или же RVM Integrator – ом
Здесь вам нужно в первой строке указать путь к дистрибутиву ХР и в последнем свой CAB – файл. Если вы все проделали правильно , то файл из вашего перепакованного дистрибутива (у меня abiword.exe) должен быть в папке путь к вашему дистрибутиву ХР\I386\SVCPACK\ABIWORD.EXE. И еще в файле SVPACK.INF , который вы также найдете в папке I386 вашего дистрибутива (правда там он будет под другим именем SVPACK.IN_ , и для его просмотра его надо будет распаковать командой EXTRACT SVPACK.IN_) , в секции [SetupHotfixesToRun] вы должны увидеть строку с именем вашего перепакованного инсталла (у меня это abiword.exe /S) .
Полученный файл Compressed.cab переименуйте в AddonsИмяВашейПрограммы.cab (например AddonsOpera851.cab) . И интегрируйте вышеуказанными способами.Addons в названии файла необходим (как выяснилось) иначе RVM Integrator не видит этот файл.
С уважением , Заур Багиров ака Теплый Снег
Baku Azerbaijan 1/12/2005
Opera - 3,85 мб
Оффлайн версию этой статьи забирайте здесь
P.S. Готовые программные аддоны можно найти здесь
Вот держите первый перекованный инсталл для интеграции.
Это лучший браузер (ИМХО) Опера.
Версия 8,51 билд 7712
меню - расширенное от Мангуста + keyboard.ini + search.ini
По ссылке ниже лежит каб архив , готовый для интеграции.Также, распаковав архив в папке SVCPACK вы найдете "тихий инсталл" Оперы.И так я надеюсь - что это первый , но последний пакет для ингрирования в дистрибутив
Антивирусная программа NOD32 русская стандартная версия 2.50.26 в триальном исполнении для интеграции в дистрибутив вот здесь 8 мб
Интеграция, или автоматическая установка, приложений выполняется с помощью специальных ключей пакетных файлов и зависит от типа используемого установщика. Ниже рассматривается интеграция языковых пакетов, драйверов и обновлений в операционную систему Windows 7/Vista с помощью встроенной утилиты Dism.exe.
- Как интегрировать программы в Windows
- Как интегрировать Windows Media
- Как интегрировать программы в дистрибутив
Создайте на рабочем столе папку с именем 7Update, а в ней две подпапки с именами Х64 и Х86, и скопируйте файлы обновлений в соответствующие директории.
Обратите внимание на желательность использования единого формата сохранения файлов (*.msu или *.cab) и запустите приложение UltraISO.
Извлеките файл install.wim из образа операционной системы в созданную ранее папку 7Update и запустите приложение «Блокнот».
Создайте файл со значением:MD %~dp0MOUNTDism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:4 /MountDir:%~dp0MOUNTDism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0x64"Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commitдля версии Microsoft Windows 7 Максимальная х64 илиMD %~dp0MOUNTDism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:5 /MountDir:%~dp0MOUNTDism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0x86"Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commitдля версии Microsoft Windows Максимальная х86.
Укажите значение x64_update и x86_update в соответствующих полях «Имя файла» и выберите расширение .cmd в поле «Тип файла».
Создайте копии выбранных файлов в папке 7Update и вызовите контекстное меню необходимой версии кликом правой кнопки мыши.
Дождитесь завершения процесса и переместите файл install.wim в исходный образ операционной системы в папку sources с помощью программы UltraISO.
Сохраните примененные изменения и перезагрузите компьютер или используйте следующий синтаксис для автоматической (тихой) установки выбранного приложения:start /wait %systemdrive%installApplicationsимя_приложенияимя_исполняемого_файла_приложения.exe /silent /noreboot,где silent и reboot - ключи, а %systemdrive%installApplicationsимя_приложенияимя_исполняемого_файла_приложения.exe - служит для вызова программы.
Процедура интеграции выбранных приложений в дистрибутив OC Windows подразумевает использование полностью автоматизированного, или unattended, дистрибутива. Он может быть создан с помощью специализированных приложений, наиболее известными из которых являются Windows Unattended CD Creator и nLite. Интегрирование программ потребует использования дополнительного софта.
- Как интегрировать программы в дистрибутив
- Как интегрировать драйвера
- Как создать wpi диск
- - cmdow.exe;
- - Universal Silent Switch Finder;
- - WinRar
Создайте автоматизированные, или unattended, дистрибутивы приложений, подлежащих интеграции. Эта операция подразумевает определение и прописывание ключей выбранных программ в sfx архиве. Для этого запустите приложение Universal Silent Switch Finder и нажмите кнопку с символом ">" в главном окне программы.
Укажите полный путь к подлежащему интеграции установочному файлу программы и определите ее ключи в строке Usage. Запустите приложение WinRar и выделите нужные файлы программы, автоматизированный дистрибутив которой необходимо интегрировать в Windows. Воспользуйтесь опцией «Добавить в архив» и перейдите на вкладку «Общие» открывшегося диалогового окна приложения. Примените флажок на поле «Создать SFX-архив».
Введите произвольное значение имени в соответствующее поле и укажите опцию максимального уровня сжатия. Перейдите на вкладку «Дополнительно» и воспользуйтесь кнопкой «Параметры SFX». Выберите вкладку «Общие» следующего диалогового окна и введите сохраненные ранее кличи приложений в строку «Выполнить».
Перейдите на вкладку «Режимы» и примените флажки на полях:- «Перезаписать все файлы»;- «Скрытый режим»;- «Распаковать во временную папку».
Создайте новый текстовый документ с именем cmdlines.txt и содержанием[Commands] "Soft.cmd". Поместите его в папку $OEM$ и создайте пакетный файл Soft.cmd.
Введите значение cmdow @ /HID в первую строку документа для запуска утилиты cmdow и внесите значение @echo off - во вторую. Напечатайте SET CDROM=%~d0в третьей строке и внесите значениеstart /wait %CDROM%sfx1.exeв следующую, четвертую, строку.
Повторите то же значение в пятой строке, измениив только 1 на 2 в sfx, и завершите создаваемый документ шестой строкой со значением exit. Поместите созданный пакетный файл в ту же директорию.
За установкой операционной системы неизменно следует процесс инсталляции драйверов для поддержания работы устройств. На самом деле, имея постоянную конфигурацию компьютера, вы можете оптимизировать этот процесс, интегрируя драйвера в дистрибутив операционной системы.
- Как интегрировать в дистрибутив
- Как интегрировать драйвера
- Как интегрировать пак
- - программа nLite;
- - дистрибутив операционной системы;
- - драйвера.
Скачайте программу nLite, установите и запустите ее. Если вы хорошо знаете английский, не меняйте настройки интерфейса на русский язык, поскольку в основном все русифицированные версии программы содержат не совсем понятный перевод. В открывшемся окне укажите путь к дистрибутиву вашей операционной системы на жестком диске при помощи кнопки «Обзор». Выберите режимы образа диска и драйверов.
Убедитесь в том, что nLite правильно определила язык и версию вашего дистрибутива. Выберите папку нахождения драйверов на вашем компьютере, предварительно добавив ее в программе. Обратите внимание, что все они должны находиться в одной директории.
Нажмите на кнопку «Далее» и выполните процесс интеграции драйверов в дистрибутив операционной системы Windows. Не забудьте сделать диск с новой копией мультизагрузочным. Это необходимое условие для установки Windows с диска. После завершения процесса инсталляции на ваш компьютер будут автоматически установлены интегрированные вами драйвера, при этом избавив вас от необходимости хранения многочисленных дисков для программ поддержки устройств.
Выполните перезагрузку системы после того, как на нее установятся все драйвера. Это связано с тем, что не все копии Windows с интегрированными драйверами выполняют перезагрузку самостоятельно. Проверьте работу устройств, запустив какой-либо из медиафайлов на нем. Также обратите внимание на отображение сведений о системе.
Некоторые приложения для Windows определяют расширения Проводника, которые добавляют строки контекстного меню, позволяющие клиентам выполнять команды, связанные с приложением. Более старые технологии развертывания приложений Windows, такие как MSI и ClickOnce, определяют расширения проводника с помощью реестра. Реестр содержит ряд кустов, которые управляют расширениями Проводника и другими типами расширений оболочки. Эти установщики обычно создают набор разделов реестра для настройки различных элементов, включаемых в контекстное меню.
При упаковке приложения Windows с помощью MSIX реестр виртуализируется, поэтому приложение не может зарегистрировать расширения Проводника в реестре. Вместо этого необходимо определить расширения Проводника с помощью расширений пакета, которые определяются в манифесте пакета. Здесь описываются несколько способов этого.
Полные примеры кода, используемые в этой статье, можно найти на GitHub.
Добавление строки контекстного меню, поддерживающей параметры запуска
Одним из самых простых способов интеграции с Проводником является определение расширения пакета, которое добавляет приложение в список доступных приложений в контекстном меню, когда пользователь щелкает правой кнопкой мыши файл определенного типа в Проводнике. Когда пользователь открывает приложение, расширение может передавать параметры в приложение.
Этот сценарий имеет несколько ограничений.
- Он работает только в сочетании с функцией сопоставления типов файлов. В контекстном меню можно отобразить дополнительные команды только для типов файлов, связанных с основным приложением (например, чтобы приложение поддерживало открытие файла двойным щелчком по этому файлу в Проводнике).
- Пункты контекстного меню будут отображаться, только если приложение ассоциировано по умолчанию с этим типом файлов.
- Единственное поддерживаемое действие — запуск основного исполняемого файла приложения (то есть того же исполняемого файла, который связан с элементом меню "Пуск"). Однако каждое действие может сопровождаться различными параметрами, которые можно использовать, чтобы приложения могли понимать, какое действие активировало выполнение, и выполнять разные задачи.
Несмотря на эти ограничения, этот подход работает во множестве сценариев. Например, при создании редактора изображений можно легко добавить в контекстное меню элемент для изменения размера изображения, который непосредственно вызывает редактор изображений с мастером для изменения размера изображения.
Реализация элемента контекстного меню
Для поддержки этого сценария добавьте в манифест пакета элемент Extension с категорией windows.fileTypeAssociation . Этот элемент следует добавлять в качестве дочернего элемента для элемента Extensions в элементе Application.
В этом примере предполагается, что следующие пространства имен и псевдонимы объявляются в корневом элементе манифеста.
Элемент FileTypeAssociation связывает приложение с типами файлов, которые требуется поддерживать. Дополнительные сведения см. в разделе Создание связи вашего упакованного приложения с набором типов файлов. Ниже приведены наиболее важные объекты, связанные с этим элементом.
Атрибут или элемент | Описание |
---|---|
Атрибут Name | Соответствует имени расширения, которое вы хотите зарегистрировать, за исключением точки (в предыдущем примере — foo ). |
Атрибут Parameters | Содержит параметры, которые необходимо передать в приложение, когда пользователь дважды щелкает файл с таким расширением. Как правило, по меньшей мере вы передаете %1 , который является специальным параметром, содержащим путь к выбранному файлу. Таким образом, при двойном щелчке по файлу приложение знает полный путь и может загрузить его. |
Элемент SupportedFileTypes | Указывает имена для регистрируемого расширения, включая точку (в этом примере — .foo ). Можно указать несколько строк , которые будут поддерживать больше типов файлов. |
Чтобы определить интеграцию контекстного меню, необходимо также добавить дочерний элемент SupportedVerbs. Этот элемент содержит один или несколько элементов Verb, определяющих параметры, которые будут показаны, когда пользователь щелкнет правой кнопкой мыши файл с расширением .foo в Проводнике. Дополнительные сведения см. в разделе Добавление параметров в контекстное меню файлов определенного типа. Ниже приведены наиболее важные пункты, связанные с элементом Verb.
Атрибут или элемент | Описание |
---|---|
Атрибут Id | Указывает уникальный идентификатор для действия. |
Атрибут Parameters | Как и элемент FileTypeAssociation, этот атрибут для элемента Verb содержит параметры, которые передаются в приложение, когда пользователь щелкает строку контекстного меню. Как правило, кроме специального параметра %1 для получения пути к выбранному файлу можно передать один или несколько параметров для получения контекста. Это позволяет приложению понять, что оно было открыто из команды в контекстном меню. |
Значение элемента | Значение элемента Verb содержит метку, отображаемую в строке контекстного меню (в этом примере — Изменить размер). |
Доступ к параметрам запуска в коде приложения
Способ получения параметров приложением зависит от типа созданного приложения. Например, приложение WPF обычно обрабатывает аргументы события запуска в методе OnStartup класса App . Можно проверить наличие параметров запуска и, исходя из результата, выполнить наиболее подходящее действие (например, открыть специальное окно приложения вместо основного).
На снимке ниже экрана показана строка контекстного меню Изменить размер, созданная в предыдущем примере.
Поддержка обычных файлов или папок и выполнение сложных задач
Хотя использования расширения FileTypeAssociation в манифесте пакета, как описано в предыдущем разделе, достаточно для многих сценариев, его может оказаться недостаточно. Причинами этого могут оказаться две большие проблемы.
- Вы можете работать только с ассоциированными типами файлов. Например, нельзя управлять обычной папкой.
- Приложение можно запустить только с помощью набора параметров. Вы не можете выполнять сложные операции, такие как запуск другого исполняемого файла или выполнение задачи, не открывая основное приложение.
Для достижения этих целей необходимо создать расширение оболочки, которое предоставляет более эффективные способы интеграции с Проводником. В этом сценарии создается библиотека DLL, содержащая все необходимое для управления контекстным меню файла, в том числе метку, значок, состояние и выполняемые задачи. Поскольку эта функция реализована в библиотеке DLL, вы можете делать практически все, что можно делать с обычным приложением. После реализации библиотеки DLL необходимо зарегистрировать ее с помощью расширений, определенных в манифесте пакета.
Процесс, описанный в этом разделе, имеет одно ограничение. После установки пакета MSIX, содержащего расширение, на целевом компьютере необходимо перезапустить Проводник, прежде чем можно будет загрузить расширение оболочки. Для этого пользователь может перезагрузить компьютер или перезапустить процесс explorer.exe с помощью Диспетчера задач.
Реализация расширения оболочки
Пример кода, демонстрирующий способы реализации расширений оболочки, см. в проекте ExplorerCommandVerb в соответствующем примере на сайте GitHub. Этот проект основывается на этом примере в примерах для настольных систем Windows, и содержит несколько редакций, чтобы упростить его использование с последними версиями Visual Studio.
Этот проект содержит много типовых кодов для различных задач, таких как динамические и статические меню, а также ручная регистрация библиотеки DLL. Большая часть этого кода не требуется, если вы упаковываете приложение с помощью MSIX, так как этими задачами будет заниматься поддержка пакетов. Файл ExplorerCommandVerb.cpp содержит реализацию контекстного меню, и это основной файл кода, которому посвящено это пошаговое руководство.
Основная функция — это CExplorerCommandVerb::Invoke . Это функция, которая вызывается, когда пользователь щелкает строку в контекстном меню. В этом примере, чтобы уменьшить снижение производительности, операция выполняется в другом потоке, поэтому фактическую реализацию можно найти в CExplorerCommandVerb::_ThreadProc .
- Чтобы настроить метку записи в контекстном меню, можно изменить функцию GetTitle.
- Функцию GetIcon можно изменить, чтобы настроить значок, отображаемый рядом со строкой в контекстном меню.
- Функцию GetTooltip можно изменить, чтобы настроить подсказку, которая отображается при наведении указателя мыши на строку в контекстном меню.
Так как расширение оболочки основано на модели COM, реализация DLL должна быть представлена как сервер COM, чтобы Windows могла интегрировать ее с Проводником. Как правило, это делается путем присвоения серверу COM уникального идентификатора (называемого CLSID) и его регистрации в определенном кусте системного реестра. В проекте ExplorerCommandVerb идентификатор CLSID для расширения CExplorerCommandVerb определяется в файле DLL.h.
В манифесте пакета начните с добавления следующих пространств имен в элемент Package.
Существует два критических настраиваемых атрибута в элементе com:Class.
attribute | Описание |
---|---|
Атрибут Id | Он должен совпадать с идентификатором CLSID объекта, который необходимо зарегистрировать. В этом примере это CLSID, объявленный в файле Dll.h , связанном с классом CExplorerCommandVerb . |
Атрибут Path | Он должен содержать имя библиотеки DLL, предоставляющей объект COM. В этом примере библиотека DLL содержится в корне пакета, поэтому можно просто указать имя библиотеки DLL, созданной проектом ExplorerCommandVerb . |
Затем добавьте еще одно расширение, которое регистрирует контекстное меню файла. Для этого добавьте элемент desktop4:Extension с категорией windows.fileExplorerContextMenus в манифест пакета. Этот элемент также следует добавлять в качестве дочернего элемента для элемента Extensions в элементе Application.
Существует два критических настраиваемых атрибута в элементе desktop4:Extension.
Настройка библиотеки DLL в пакете
Добавьте библиотеку DLL, которая реализует расширение оболочки (в этом примере ExplorerCommandVerb.dll) в корневую папку пакета MSIX. Если вы используете проект упаковки приложений Windows, самым простым решением является копирование и вставка библиотеки DLL в проект и проверка того, что для параметра Копировать в выходной каталог свойств DLL-файла задано значение Копировать, если новее.
Чтобы гарантировать, что пакет всегда содержит последнюю версию библиотеки DLL, в проект расширения оболочки можно добавить событие после сборки таким образом, чтобы при каждой сборке библиотека DLL копировалась в проект упаковки приложений Windows.
Перезапуск Проводника
После установки пакета расширения оболочки необходимо перезапустить Проводник, прежде чем можно будет загрузить расширение оболочки. Это ограничение расширений оболочки, которые разворачиваются и регистрируются с помощью пакетов MSIX.
Чтобы проверить расширение оболочки, перезапустите компьютер или перезапустите процесс explorer.exe с помощью Диспетчера задач. После этого вы сможете увидеть эту строку в контекстном меню.
Читайте также: