Фон
Мы используем 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. Так что, к сожалению, это больше не вопрос программирования. Мы получаем некоторую помощь по этому поводу, и я опубликую исправление.