P4Start - утилита для подключения пакета программ под WinPE/OS Утилита является развитием способа подключения набора программ (программного пакета, или далее просто ПП), используемого в сборках 2k10. Вначале уточню способ подключения ПП, используемый в P2Start (2k10) и P4Start: 1. Папка с программным пакетом монтируется как диск (в 2k10 это диск Y:\) 2. В меню Пуск, на рабочий стол и в QuickLaunch распаковываются заранее заготовленные ярлычки программ, "привязанные" к диску Y:\ 3. Удаляются ярлычки для отсутствующих в ПП программ (что позволяет пользователю корректировать ПП под свои запросы, просто удаляя "ненужное") 4. Производятся дополнительные действия по настройке конкретной WinPE. Отличие P4Start от предыдущего варианта подключения ПП в 2k10 - это полная автономность и независимость от 2k10. Т.е., P4Start может использоваться в любых WinPE (с оболочкой на базе Explorer, в которой имеется меню Пуск); из любой папки (нет жесткой привязки в каталогу ПП); ПП может монтироваться на любую букву (естественно, ярлычки должны быть "привязаны" к этой букве); имеется трей-утилита с мониторингом подключения ПП (с возможностью отключения/подключения ПП); всё необходимое для работы интегрировано в утилиту (не требуется дополнительных файлов); допустимо изменение имени утилиты (конфигурационный архив должен иметь такое же имя).
P4Start.7z - конфигурационный архив (его имя должно совпадать с именем утилиты, расширение 7z). Внутри находятся:
1. Файл конфигурации P4Start.cfg. В нём указываются переменные для подключения программного пакета и списки исключений для конкретной РЕ/ОС. 2. Папка "SoftPack.2k10" - ярлычки сборки, будут в "Пуск\SoftPack.2k10". 3* Папка "Desktop.PE" - ярлычки, которые будут извлечены на рабочий стол. 4* Папка "Programs.PE" - ярлычки, которые будут в "Пуск\Программы". 5* Папка "QuickLaunch.PE" - ярлычки для панели быстрого запуска "Quick Launch". 6. Start_PE.cmd - коммандный файл, который будет выполнен после подключения программного пакета под WinPE. Start_OS.cmd - аналогично, выполняется под ОС. 7* Всё, что находится в папке "System32", под РЕ-сборками будет скопировано в %WinDir%\System32 (для х64 также делается копия в %WinDir%\SysWOW64). 8* В папке Add2Reg.PE\All*****.reg - общие патчи реестра (например, для регистрации программ). 9* В папке Add2Reg.PE\Add_XXXX.reg - патчи реестра, применяемые для конкретной сборки. Т.е., Add_7x64.reg будет применён только для РЕ 7х64. * - означает, что действие будет произведено только под РЕ-сборками (под обычной ОС задействуется только папка SoftPack.2k10).
В файле конфигурации P4Start.cfg (внутри архива P4Start.7z) указываются:
P4Marker=Y:\icons.dll - маркер подключенного ПП (диск, на который будет смонтирован ПП плюс файл, который гарантированно имеется в ПП) P4Folder=..\Test.Pack\SoftPack - путь к ПП, может указываться относительно корня диска до папки ПП, либо относительно архива P4Start.7z (в данном примере ..\ - это переход на уровень выше) P4Name=SoftPack.2k10 - имя ПП в меню Пуск (оно же имя папки основного набора ярлычков ПП в архиве P4Start.7z) P4TrayPE=no - переменная, значение tray указывает, что будет использована трей-утилита для отключения/подключения ПП под WinPE (в ОС эта утилита используется всегда, независимо от настроек). Также tray может использоваться в качестве ключа запуска (ключ приоритетнее настроек), пример запуска: P4Start.exe tray WIMfile=Wim-soft.wim - имя wim-файла для монтирования (путь указывается относительно корня диска либо относительно архива P4Start.7z, аналогичноP4Folder) WIMmount=B:\PePrograms - путь, по которому будет смонтирован wim-файл (при наличии самого wim-файла, естественно) Также в конфиг могут быть включены наборы масок ярлычков, которые нужно удалить для конкретной РЕ. Наборы указываются как del+Код, где Код: 5x86 (РЕ на базе 2003/ХР), 7x86 / 7x64 (РЕ на 7), 8x86 / 8x64 (РЕ на базе 8 или 8.1), 10х86 / 10х64 (РЕ на базе 10 или 11), WinOS - обычная ОС. Маска должна однозначно определять имя ярлычка, который нужно удалить, пробелы недопустимы (заменяем их звёздочкой *), при поиске звёздочка подставляется спереди и сзади маски, т.е., можно указывать неполное имя как спереди, так и сзади. Пример набора масок: del5x86=Acro DaRT 78setup EasyBCD DismPP *target*OS* delWinOS=Acro DialupPE Disk*Cryptor Driver*Import*PE Office*2007 Reset*Windows*Password Reset*WinPassword ERD*2005 OO*Bluecon
Дополнительные возможности, реализуемые утилитой:
1. Смена обоев WinPE из заготовок в папке ПП User.Config (при условии, что свободной памяти больше 256Мб) 2. Создание ярлычка для папки пользователя User.Folder (в РЕ - на рабочем столе, в ОС - в меню ПП) - при условии, что в папке есть хотя бы один EXE-файл. 3. Если буква для монтирования ПП уже занята другим, будет произведена попытка перемонтировать другое на последнюю свободную букву, чтобы смонтировать ПП. 4. Ведётся лог работы, файл P4Start.log в папке %Temp%. 5. Выполнение скрипта пользователя, с готовыми переменными. 6. Предлагайте свои пожелания...
Как могут взаиморазмещаться P4Start.exe, архив P4Start.7z и папка ПП
Для автозапуска ПП после старта РЕ необходимо обеспечить поиск и запуск P4Start.exe. Это можно сделать двумя способами: 1. Поиск по полному относительному пути (т.е., от корня диска). Реализуется просто, но после "переезда" сборки в другую папку придётся править скрипт поиска в ядре. 2. Вариант сложнее, но более универсальный: при запуске из РЕ вначале ищем относительный путь к WIM-файлу, из которого запущено ядро. Этот путь указан в реестре HKLM\SYSTEM\CurrentControlSet\Control, в конце SystemStartOptions. Потом по этому относительному пути мы находим накопитель с ядром. А P4Start.exe можно положить рядом с WIM-файлом ядра. Таким способом мы можем переносить ядро с ПП в разные папки без изменения скрипта поискаP4Start.exe. Скрипт PECMD для поиска и запуска P4Start.exe, находящегося в одной папке с запущенным ядром: REGi $HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&&te //получаем значение SystemStartOptions TEAM SED &&te=1,RDPATH,*,%&te%|SED &&te=1,\\,*,%&te%|MSTR -delims:* &&te=<3>%&te% //фильтруем только то, что нам нужно - путь к WIM-файлу TEAM FDRV *ab &&de=*:|ENVI &&we=No //получаем список букв дисков FORX* %&de%,&&ne,IFEX :e%&ne%\%&te%,TEAM ENVI &&we=%&ne%\%&te%|EXIT FORX //ищем накопитель с WIM-файлом TEAM FDIR &&we=%&we%|IFEX :e%&we%\P4Start.exe,EXEC %&we%\P4Start.exe //запускаем из папки с WIM-файлом P4Start.exe Возможна реализация скрипта подключения обычным CMD. Теперь о конфиг-архиве. Самый простой вариант - размещение P4Start.7z рядом с P4Start.exe. Но это не обязательно. P4Start.7z также будет найден и подхвачен из подкаталогов папки (до 2-х уровней глубины), откуда запущен P4Start.exe, а также из подкаталогов родительского каталога P4Start.exe (также до 2 уровней глубины). Например, путь к P4Start.exe - папка Petya\WinPE, тогда P4Start.7z может находиться в Petya\WinPE\My\Config или Petya\Config\My. В первом примере это подкаталог 2-го уровня ниже P4Start.exe, а во втором - подкаталог 2-го уровня родительского каталога. Быстрее всего будет подхвачен рядом лежащий P4Start.7z, но и поиск в подкаталогах не слишком долгий (милисекунды для флешки). Сам ПП указывается в конфиге, и, если указать путь относительно конфиг-архива, тогда получается полная независимость ПП от папки РЕ-сборки.
Файл-маркер и использование в этом качестве библиотеки хранения иконок программ icons.dll
Для тех, кто ещё не знает: icons.dll - это сборник иконок для программ из ПП. Использование одного файла для всех иконок позволяет существенно ускорить монтирование программного пакета и прорисовку пунктов в меню, особенно это заметно на медленных носителях (например, CD-Rom). Происходит так потому, что ОС/РЕ кеширует этот файл при первом обращении, и в дальнейшем читает из кеша нужное. Поэтому использование такого файла крайне рекомендуется. Ну и, вдобавок, из него получается отличный маркерный файл.
Как добавить свою программу в программный пакет?
Все используемые в ПП утилиты - это sfx-архивы или готовые портативки. Нужно убедиться, что они могут работать в среде WinPE с предполагаемыми сборками. Небольшая подсказка: если программа требует для работы какую-то системную библиотеку, часто отсутствующую в РЕ, можно попробовать включить требуемое прямо в состав файлов утилиты. Иногда это работает прямо из папки утилиты, а порой нужно закинуть в системный каталог, нужно проверять. Итак, если у нас имеется утилита, которая нормально работает под РЕ, добавляем её в папку согласно специализации, подключаем ПП с помощью P4Start.exe, создаём ярлык для запуска утилиты из диска Y:\ (если в конфиге выбрали другую букву ПП, тогда для неё), пишем описание (правило хорошего тона - для тех, кто будет пользоваться утилитой), выбираем иконку... Тут можно действовать по-разному. Можно выбрать подходящую иконку из системных библиотек, можно добавить иконку утилиты в сборник иконок icons.dll (тут желательна синхронизация с другими пользователями), и самый простой (но самый "медленный" для подключения ПП) способ - использовать иконку sfx-модуля. После этого просто добавляем ярлычек запуска утилиты в нужную папку архива P4Start.7z, и выключаем/включаем ПП. Ярлычок должен появиться в ПП (конечно, если он добавлен в основной пакет, папку SoftPack.2k10 в исходном случае).
Актуальный перечень номеров иконок в файле icons.dll (для 2k10 Next 220119)
-Выражаю свою благодарность AZJIO за реализацию трей-утилиты для P4Start.-*** Для демонстрации возможностей в состав P4Start включен небольшой набор утилит из 2к10, для тестирования распаковать на любой накопитель, запустить P4Start.cmd или pe10\P4Start.exe. При переносе ПП в другую папку не забудьте подправить путь в P4Start.cmd (и, при необходимости, конфигурацию переменных в P4Start.7z\P4Start.cfg).Версия 1.0 final (upload.ee)
Last edited by Guest on 2022-01-22 14:55; edited 15 times in total
Вторая сборка. Кардинальных изменений нет: немного подправил вид лог-файла (напомню, находится по пути %Temp%\P4Start.log); для CMD-скриптов добавил переменную %Xbit% - разрядность ОС/РЕ (значение x86 или x64); ярлычок "User.Folder" создаётся только при наличии внутри папки EXE-файлов (и обновляетя при каждом переподключенииПП). Во втором наборе ПП находится в папке EFI. Ещё раз обращаю внимание: в переменных P4Folder и WIMfile можно указывать путь к объекту как от корня накопителя , так и путь от конфиг-архива. P4Start сама развернёт путь от архива в полный путь от корня, даже с переходами на уровень вверх "..\". Т.е., P4Folder=SoftPack и P4Folder=EFI\SoftPack для второго набора одинаково развернутся в EFI\SoftPack, что и будет отображено в логе. Если пути указаны неверно (отсутствуют), тогда назначаются пути по-умолчанию, для 2k10.
Еще, при отключении софт пак через p4tray ярлыки с рабочего стола и панели задач не удаляются. При отключении FindWP>>DelSP ярлыки с рабочего стола удаляются, а вот с панели задач нет.
loban_ser, ну, p4tray и не должна это делать. Изначально утилитка предназначена для ОС. Её задача удалить то, что монтируется под ОС, т.е., только папку в меню Пуск. Причем, даже при извлечении флешки или в случае перезагрузки компьютера, чтобы не оставлять в меню мертвые души. Возможность использования утилиты под РЕ добавлена бонусом (по-умолчанию отключена), и лишь для того, чтобы освободить флешку под извлечение. Удаление всего, что подключила под РЕ P4Start - не такая простая задача, чтобы ее решить (ведь под РЕ, кроме ярлычков, и реестр правится, и cmd-скрипт выполняется, и wim может монтироваться). Лично я не вижу смысла ради удаления под РЕ заморачиваться. Там ПП подключается разово, до перезагрузки. В 2k10 возможность отключения ПП реализована отдельным скриптом из цветного значка в трее. Да и то, там не удаляются ярлычки ПП, а просто подчищаются все "мертвые души", что позволительно под РЕ и недопустимо для ОС.
conty9, приветствую! Спасибо за обновление! Раньше в архив 2k10\Programs-2k10\Win2k78.7z можно было подкинуть свой ярлык на какую-нибудь программу на флешке и если эта программа есть на флешке, то ярлык отображался в WinPE, а если нет этой программы, то не отображался. ОК, этот функционал перенесен в 2k10\WinPE\P4Start.7z. Но как я понял, теперь нельзя в свойствах ярлыка указать букву диска со сборкой, если моя программа лежит за пределами папки 2k10 (просто где-то на той же флешке)? Т.е. например, в Start_PE.cmd можно задать %CurDrv% и %P4Letter% - это хорошо, но вот как прописать букву диска со сборкой в свойства ярлыка, если буква диска со сборкой всё время меняется? Раньше она была одна и та же, была буквой "U:"...
Eagle123, и раньше буква диска со сборником тоже могла меняться. Именно поэтому программный пакет всегда монтируется как буква Y:\, чтобы была привязка к конкретной букве. Если есть необходимость создать и подключать в меню именно ярлык для программы, тогда можно поступить следующим образом: создать ярлык для батника в пределах 2K10\Programs-2k10 под диск Y:\..., а самим батником искать и запускать нужное. Либо в Start_PE.cmd генерировать ярлычек под нужную букву диска, это несложно. Например, создать ярлык можно так: pecmd.exe LINK %Desktop%\МояПрограмма,%CurDrv%\Папка\Программа.exe где %Desktop%\МояПрограмма - имя ярлычка на раб.столе, Папка\Программа.exe - путь от корня к программе.
92236раньше буква диска со сборником тоже могла меняться
что-то у меня в прошлых версиях 2k10 (например 7.35) всегда буква со сборником была U:, а программный пакет Y:.
92236создать ярлык для батника в пределах 2K10\Programs-2k10 под диск Y:\..., а самим батником искать и запускать нужное.
Ну это совсем колхоз-самоделкин какой-то. Конечно можно, но это совсем последний вариант, имхо :) Добавил в файл 2k10\WinPE\P4Start.7z\Start_PE.cmd перед "exit" команду:
pecmd.exe LINK X:\Prog2Ram,Y:\Prog2Ram.exe
Но что-то ярлыка не появляется. А если запустить командную строку в уже запущенной WinPE и в ней выполнить эту команду, то ярлык появляется. Пробовал прописывать в Start_PE.cmd ведение лога:
pecmd.exe LINK X:\Prog2Ram,Y:\Prog2Ram.exe > X:\1.log
Eagle123, ну, не всегда буква была U:\ (как и сейчас) - это точно. Гарантированно она была U только при условии, что программный пакет находится на втором разделе флешки (в силу особенности монтирования второго раздела). К слову, и сейчас точно так же. По поводу создания. Думаю, тестирование производилось под РЕх64, тогда pecmd.exe из системного каталога "в лоб" из-под х86-подсистемы недоступен. Но можно тогда прописать так;
If Exist %WinDir%\SysNative\pecmd.exe set pecmd=%WinDir%\SysNative\pecmd.exe Else set pecmd=%WinDir%\System32\pecmd.exe %pecmd% LINK X:\Prog2Ram,Y:\Prog2Ram.exe
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum