Клонируем UWP-приложения – проще чем кажется
Предисловие
Ни для кого не секрет, что на смартфонах под управлением операционной системы Android можно клонировать приложения. Иногда этот функционал даже встроен в систему. Один из примеров тому — (не) всеми любимая MIUI, которая, начиная с двенадцатой версии, уже умела создавать дубликаты приложений.
Однако если речь идёт о Windows 10/11, то я не встречал решений для клонирования UWP-приложений. Давайте попробуем это исправить!
Подготовка
Итак, что же нам понадобится:
Прямые руки, немного терпения
Устройство под управлением Windows 10/11
Пакет SDK для Windows (доступен для загрузки здесь)
Если вы уверены, что всё, перечисленное выше, у вас имеется — можно двигаться дальше.
Приступим к действиям
Первым делом нам необходимо выбрать приложение, которые мы будем клонировать. В качестве подопытного я выбрал Unigram — клиент для мессенджера Telegram. Дальнейшие действия буду показывать на этом примере.
Открываем PowerShell от имени администратора. Вводим следующую команду:
Get-AppxPackage
Эта команда покажет нам список всех установленных приложений. Среди всего списка находим то, которое мы собираемся клонировать. Выглядит это примерно следующим образом:
Name : 38833FF26BA1D.UnigramPreview
Publisher : CN=D89C87B4-2758-402A-8F40-3571D00882AB
Architecture : X64
ResourceId :
Version : 11.3.3.0
PackageFullName : 38833FF26BA1D.UnigramPreview_11.3.3.0_x64__g9c9v27vpyspw
InstallLocation : C:\Program Files\WindowsApps\38833FF26BA1D.UnigramPreview_11.3.3.0_x64__g9c9v27vpyspw
IsFramework : False
PackageFamilyName : 38833FF26BA1D.UnigramPreview_g9c9v27vpyspw
PublisherId : g9c9v27vpyspw
IsResourcePackage : False
IsBundle : False
IsDevelopmentMode : False
NonRemovable : False
Dependencies : {Microsoft.UI.Xaml.2.8_8.2310.30001.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Framework.2.2_2.2.29
512.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe, Microsof
t.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe...}
IsPartiallyStaged : False
SignatureKind : Store
Status : Ok
Из всей этой кучи нам пригодится параметр Name. Запоминаем его.
Теперь экспортируем его куда-нибудь:
Get-AppxPackage -Name "ИМЯ_ПРИЛОЖЕНИЯ" | ForEach-Object {
Copy-Item -Path $_.InstallLocation -Recurse -Destination "ПУТЬ\$($_.Name)"
}
Имя приложения — это то самый параметр Name. Также необходимо указать путь, куда именно будет происходить экспорт.
В итоге у нас должно получиться что-то подобное:
Куча файлов, о назначении которых нам знать не обязательно
Среди этой кучи файлов должен быть AppxManifest.xml. Нам необходимо немного его отредактировать. Открываем его и находим строчку Identity. Меняем значение Name и Publisher на свои. Вот как это получилось у меня:
Теперь приступим к сборке appx-пакета. Открываем Developer Command Prompt for Visual Studio. Вводим следующее:
MakeAppx pack /d "ПУТЬ_ДО_ФАЙЛОВ_ЭКСПОРТА" /p "ПУТЬ_ГДЕ_БУДЕТ_ЛЕЖАТЬ_ПАКЕТ\Clone.appx"
Убеждаемся, что пакет успешно собрался:
И что, это всё? О нет, если вы попробуете установить его — вы столкнётесь с проблемой. Для UWP приложения по-хорошему нужен сертификат. Ну ладно — слепим его сами! В консоли PowerShell вводим следующее:
New-SelfSignedCertificate -Type Custom -Subject "CN=WHO_AM_I" -KeyUsage DigitalSignature -FriendlyName "MyAppCertificate" -CertStoreLocation "Cert:\CurrentUser\My" -KeyLength 2048
Теперь необходимо экспортировать полученный сертификат в формате .pfx. Для этого открываем certmgr.msc. Идём в Личное > Сертификаты и находим наш сертификат. Нажимаем на него правой кнопкой мыши, затем Все задачи > Экспорт.
Выбираем »Экспортировать закрытый ключ». В процессе нужно будет ввести пароль. Вводим его и запоминаем. Далее по подсказкам. Сохраняем сертификат туда, где он не потеряется.
Сертификат на месте? Отлично! Подпишем пакет нашим сертификатом в консоли Developer Command Prompt for Visual Studio:
SignTool sign /fd SHA256 /a /f "ПУТЬ_К_СЕРТИФИКАТУ.pfx" /p "ПАРОЛЬ_СЕРТИФИКАТА" "ПУТЬ_ДО_APPX"
Далее — немного хитрости. ПКМ по нашему файлу appx > Цифровые подписи > В списке подписей выбираем нашу подпись > Сведения > Просмотр сертификата > Установить сертификат > Локальный компьютер > Поместить в следующее хранилище > Обзор > Устанавливаем его в Доверенные лица.
Открываем APPX. Нажимаем установить…
Ошибка об отсутствии сертификата ушла и приложение успешно установилось. Мы счастливы. Открываем меню Пуск и в списке приложений нас встречают два приложения:
И да, наш клон успешно открывается и функционирует:
Что ещё?
Об этом я забыл упомянуть. Наверное по хорошему в манифесте можно поменять его имя. И вообще в ресурсах поменять иконку чтобы различать оригинал и копию. Я надеюсь, это не будет проблемой для вас.