понедельник, июня 26, 2017

Windows 10 и ремонт-2

В самом начале работы по модификации программки при попытке запустить отладку в Студии получил странное сообщение о невозможности разместить программу на компьютере:
Error : DEP0700 : Registration of the app failed. Another user has already installed a packaged version of this app. An unpackaged version cannot replace this.

Сначала проблема ушла после небольшого переименования пакета для магазина, однако вылезла обратно при попытке загрузить пакет в магазин, когда выяснилось, что просто так пакет для магазина не переименуешь – проще завести новое приложение, чего не хотелось.

Выясняется, что на такое наталкиваются уже давно и существует несколько рецептов исправить ситуацию с помощью PowerShell. Чуть дальше выясняется, что для Windows 10 рецепты не работают и нужно ремонтировать базу пакетов, где зависает запись об установке. Попробовал использовать китайский чудо-пакет Dism++, он эту неведомую запись увидел, но удалить не сумел.

Пришлось действовать руками, т.е. при помощи менеджера Фар. База с гнилой записью называется C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd, запись находится в таблице Package. С помощью плагина “Редактор баз данных SQLite” удалось (ну да, надо исхитряться) локализовать и удалить злополучную запись. Попутно пришлось дать по зубам системе, которая выпендривалась и не желала поставить на место отредактированную базу – по-простому объявил себя владельцем этого файла…

Есть подозрения, что эту гадость делает сама Студия, когда при попытке отладки изменённого приложения берётся удалить ранее установленное из магазина. Экспериментировать пока не хочется, но манию топтаться по собственным яйцам стрелять себе в ногу у неё не отнять – например, часто при сборке пакета вылезает ошибка типа “не могу удалить папку”, которую сама же и открыла…

Игрушечка-11 и Windows 10

Давно, собственно, чесались руки переделать программку для “ручного” скробблинга (вернее, её “универсальный” вариант) под UWP, которую сильно пропагандируют с появлением Windows 10. Но всё как-то было недосуг, да и особой нужды не возникало – версия под 8.1 нормально работала и на десктопной, и на телефонной десятке, а средства для изготовления UWP-программ были слабосильны и малочисленны.

Но в конце 2016-го появилась Visual Studio 2017 в более или менее рабочем состоянии и стали появляться разные пакеты для разработки программ. К тому же, потребовалось внести изменения в существующую программу, а для этого пришлось доставать из пыльного чулана Visual Studio 2015 (VS-2017 напрочь отказывается работать с проектами для Windows 8.1). Изменения-то внёс, но потом выяснилось, что на телефоне с десяткой не заработало. Разбираться не хотелось (на телефоне с 8.1 программка вполне работает), проще было написать версию  под десятку.

Проще, естественно, не было, было долго и нудно – пришлось переделать не только весь интерфейс, но и заметную часть “функционального” кода. По ходу дела пришлось выколачивать исправления из индийского производителя бесплатного пакета контролов, прикручивать разные расширения к пакету Microsoft.Toolkit.UWP, продираться через заросли колючек глюков в SDK, компиляторах и Nuget-пакетах. В конце пришлось даже немного поплясать вокруг системы лицензирования программ в магазине.

Но итог даже самому понравился, как на десктопе, так и на телефоне. Главное – получилось и вправду сделать один код под обе платформы (целью были десктоп и телефон, а в магазине уже приписали про голографию), нигде нет никаких кодов условной компиляции, как было раньше, и даже функция проверки, в телефоне ли дело происходит, использовалась практически только для генерации ссылок на мобильные версии веб-страниц.