Кажется, я нашёл способ клонирования UWP-приложений.
Сразу скажу, я могу ошибаться в некоторых вещах. Я никогда не занимался разработкой UWP приложений.
Может быть некоторые вещи можно было сделать проще.
Эвристическим путём (методом проб и ошибок) я пришёл с следующему способу:
1. Открываем терминал от администратора. Открываем PowerShell.
2. С помощью этой команды посмотрим список установленных UWP приложений:
Get-AppxPackage
3. Допустим мы хотим клонировать Unigram. Находим его среди этого списка. Будет выглядеть как-то так:
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.
4. Экспортируем приложение как-то типа так:
C:\Users\Derte> Get-AppxPackage -Name "38833FF26BA1D.UnigramPreview" | ForEach-Object {
Copy-Item -Path $_.InstallLocation -Recurse -Destination "D:\CloneUnigram\$($_.Name)"
}
В эту команду нужно подставить тот самый
Name, а так же путь, куда мы будем экспортировать (у меня это
D:\CloneUnigram )
В итоге у нас должно получиться что-то подобное:
Куча файлов, среди которых должен быть AppxManifest.xml.
5. Открываем AppxManifest.xml. Находим строчку
Identity. Меняем значение
Name и
Publisher на свои.
Как это получилось у меня:
<Identity Name="CLONE_Unigram" Publisher="CN=WHO_AM_I" Version="11.3.3.0" ProcessorArchitecture="x64" />
6. Соберём appx пакетик.
Для этого нам понадобится Windows SDK. Скачать его можно тут:
https://developer.microsoft.com/ru-ru/windows/down...
После того как Windows SDK установится открываем терминал от администратора. Открываем Developer Command Prompt for Visual Studio. Собираем пакет:
MakeAppx pack /d "D:\CloneUnigram\38833FF26BA1D.UnigramPreview" /p "D:\CloneUnigram\Clone.appx"
7. Для UWP приложения по-хорошему нужен сертификат. Ну ладно - слепим его. В PowerShell:
New-SelfSignedCertificate -Type Custom -Subject "CN=WHO_AM_I" -KeyUsage DigitalSignature -FriendlyName "MyAppCertificate" -CertStoreLocation "Cert:\CurrentUser\My" -KeyLength 2048
8. Экспортируем полученный сертификат в формате .pfx.
Выполнить > certmgr.msc.
Откроется окно сертификатов. Идём в Личное > Сертификаты. Находим наш сертификат.
ПКМ по нему > Все задачи > Экспорт
Выбираем "Экспортировать закрытый ключ". Нужно будет ввести пароль. Вводим его и запоминаем. Далее по подсказкам. Сохраняем сертификат туда, где он не потеряется.
9. Подпишем пакет нашим сертификатом в консоли Developer Command Prompt for Visual Studio:
SignTool sign /fd SHA256 /a /f "ПУТЬ_К_СЕРТИФИКАТУ.pfx" /p "ПАРОЛЬ_СЕРТИФИКАТА" "ПУТЬ_ДО_APPX"
10. ПКМ по нашему файлу appx > Цифровые подписи > В списке подписей выбираем нашу подпись > Сведения > Просмотр сертификата > Установить сертификат > Локальный компьютер > Поместить в следующее хранилище > Обзор > Устанавливаем его в Доверенные лица.
11. Открываем APPX. Нажимаем установить...
12. Всё (?)
Теперь у нас два приложения Unigram.
И запускаются они как разные приложения:
Ну и да. Наверное по хорошему в манифесте можно поменять его имя. И вообще в ресурсах поменять иконку чтобы их как-то различать... Но это уже сами