Развертывание Metro-приложения Windows 8, использующего SQLite

Фон

Мы используем System Center 2012 для развертывания приложения в стиле Windows 8 Metro на планшетах Samsung в полевых условиях, работающих под управлением Windows 8 Enterprise x64. Планшеты присоединяются к домену и имеют к нему постоянное обратное подключение DirectAccess, что позволяет System Center отправлять приложения и обновления на устройства.

Нам нужно развернуть наше приложение потенциально на сотнях устройств в полевых условиях, поэтому мы пошли по пути System Center. Сертификат подписи кода устанавливается на каждое устройство с помощью групповой политики. Чтобы развернуть приложение, вы просто предоставляете выходные данные пакета и указываете набор устройств для его установки. Приложение просто появляется на устройстве через несколько минут.

Проблема заключается в том, что когда System Center развертывает наше приложение, зависимость от SQLite теряется, и доступ к данным не работает.

О нашем проекте

Наше приложение представляет собой приложение WinJS, использующее SQLite в качестве серверной части. Однако весь наш код доступа к данным находится в проекте C# WinMD, на который ссылается проект WinJS. Мы используем библиотеку sqlite-net для взаимодействия с SQLite — мы включили ее исходный код в наш проект C#.

В Visual Studio мы установили расширение SQLite для среды выполнения Windows, как описано в статья Тима Хойера. Приложение Metro ссылается на это.

Тестирование с использованием других методов развертывания

Доступ к данным SQLite из приложения работает нормально, когда вы отлаживаете или запускаете его локально — как в Debug/Release, так и в x86/x64.

Процесс упаковки приложения предоставляет сценарий PowerShell, который можно использовать для установки приложения и лицензии разработчика, если это необходимо. При установке нашего приложения с помощью скрипта PowerShell доступ к данным SQLite также работает нормально. Подтвердил это, упаковав и установив версии приложения Debug/Release и x86/x64.

Устранение неполадок

Когда приложение впервые пытается использовать SQLite, мы видим исключение о том, что оно не может найти sqlite3.dll.

Мы пробовали/проверяли следующее:

  • Подтвердите, что мы развертываем сборку Release/x64.
  • Изучите appx в WinRAR и убедитесь, что он содержит sqlite3.dll.
  • Ссылка на расширение «SQLite для среды выполнения Windows» из проекта C# вместо проекта WinJS.
  • Также укажите среду выполнения C++, это привело к сбою System Center при развертывании приложения. Пока не знаю почему, но разбираюсь.

ОБНОВЛЕНИЕ Проблема заключается в том, что у System Center возникают проблемы с развертыванием зависимости библиотеки времени выполнения Visual C++, необходимой для библиотеки SQLite. Так что, к сожалению, это больше не вопрос программирования. Мы получаем некоторую помощь по этому поводу, и я опубликую исправление.


person George Durzi    schedule 07.09.2012    source источник
comment
Вопросы, которые сводятся к проблемам развертывания, по-прежнему могут быть в теме Stack Overflow. В конце концов, от программы мало толку, если ее нельзя развернуть…   -  person Donal Fellows    schedule 10.09.2012


Ответы (1)


Я хотел опубликовать детали временного исправления, которое мы собираемся использовать. Мы также приблизились к корню проблемы, поэтому я хотел предоставить и эти подробности.

Обзор проблемы

При ссылке на пакет среды выполнения Visual C++ из нашего проекта Metro System Center не может развернуть приложение на устройствах, поскольку возникает проблема с развертыванием правильной версии зависимости для соответствующей архитектуры и варианта сборки.

Наши компьютеры для разработки под управлением Visual Studio 2012 (и упаковки проекта для развертывания) используют более новую версию среды выполнения Visual C++ (50727), чем та, которая доступна в новой установке Windows 8 (50712).

Работал с командой System Center и подтвердил, что это была ошибка в версии, которую мы использовали, и она уже устранена в будущих сборках. Мы собираемся работать над обновлением среды, но это займет пару недель.

Временное решение

Я подтвердил и протестировал следующий обходной путь:

  • Удалите ссылку на пакет среды выполнения Microsoft Visual C++ из проекта Metro.
  • Установите 64-разрядную версию распространяемого пакета Visual C++ для Visual Studio 2012 — http://www.microsoft.com/en-us/download/details.aspx?id=3
  • Развернуть приложение

Работает как шарм, потому что правильная версия зависимости уже существует. Очевидно, что это не долгосрочное решение, если мы решим также ориентироваться на x86 и ARM, но оно поможет нам преодолеть этот горб.

person George Durzi    schedule 11.09.2012
comment
Здравствуйте, есть ли в настоящее время нормальный способ развертывания приложения с помощью SQLite в магазине приложений? Спасибо. - person Myth Rush; 06.05.2013