2

В настоящее время я разрабатываю приложение для Windows Store, которое в конечном итоге будет нацелено на устройства ARM, когда они будут доступны. Пока что я разрабатываю и тестирую Visual Studio на своем настольном компьютере, и все работает нормально. Однако, когда я пытаюсь создать пакет приложения, который я могу передать другим в моей компании для целей тестирования, приложение не будет работать должным образом.Развертывание боковой загрузки приложения Windows 8 Metro

Решение включает в себя два проекта. Первый - это проект на C++, который настроен на сбор DLL-файла. Цель этого - разоблачить библиотеки Direct2D и DirectWrite, которые кажутся недоступными для проекта C#. Второй проект - проект C#, который ссылается на эту DLL для функций рисования и включает в себя интерфейс XAML и большую часть программной логики. Все это безупречно работает на моей машине разработки из Visual Studio (а также при установке пакета).

Когда я отправляю файлы пакетов другим лицам внутри компании, установка работает нормально, устанавливая с помощью сценария PowerShell. Плитка появится на стартовом экране, и программа запустится на несколько секунд. Появляются интерфейсы C# и XAML, но часть DirectX приложения не видна, и все приложение отключается в течение нескольких секунд. Это заставляет меня поверить, что при установке DLL не может устанавливать или ссылаться правильно. Я проверил файл пакета, и DLL-файл включен в пакет после завершения процесса сборки.

Я упаковал несколько различных тестовых программ (MSDN Samples), которые все установлены на их машинах, но мы получаем те же результаты, что и они не будут выполняться (опять же, все образцы отлично работают на моей машине разработки при их создании) , Единственный тестовый проект, который работал правильно, был простым проектом C#, который вообще не использовал DirectX. Любой из образцов DirectX, которые я пытался, потерпел неудачу (включая собственные образцы C++, которые вообще не используют C#).

Чтобы быть ясным, процесс, который я использую для создания, будет Project -> Store -> Create App Packages и выбор опции No для загрузки в Windows Store.

Есть ли у кого-нибудь идеи о том, что может произойти неправильно с процессом сборки или установки?

Заранее благодарим за любую помощь!

+0

Только побочный вопрос, но: можете ли вы запустить проект на тестовой машине из Visual Studio? Как вы можете запустить приложение без его развертывания в виде отдельного пакета? –

+0

Да, любая из их машин, у которых уже есть Visual Studio, может запустить проект в Visual Studio. И далее, когда они запускаются из Visual Studio, метод развертывания Powershell отлично работает. Кажется, что-то, что запускается в Visual Studio, заставляет все работать. Однако это не является жизнеспособным вариантом для всех людей, которым я должен передать приложение. – mcwadar

ответ

2

Работает ли он с Metro Sideloader? Я не уверен, добавляет ли он пользовательский интерфейс к сценарию Powershell, но он работает для моей команды и меня для тестирования ...

Удачи!

+0

Я просто попробовал Metro Sideloader, как вы предложили, и похоже, что он не работает. Я загрузил exe, запустил администратор и выполнил инструкции на странице. Все оказалось правильно установлено, и приложение сообщило об успехе. Однако приложение никогда не появлялось на экране плитки и также не было найдено в разделе «Все приложения». На данный момент, я думаю, что я просто подожду еще несколько дней, пока не появятся таблетки RT и не попытаются получить внутреннюю сборку для них. В любом случае, это то, к чему я буду ориентироваться. Спасибо за предложение. – mcwadar

1

Вы загружаете отладочную версию своего приложения DirectX на компьютер, на котором не установлен Windows SDK? Проекты DirectX Visual Studio по умолчанию и образцы в MSDN запрашивают флаг D3D11_CREATE_DEVICE_DEBUG при создании устройства D3D. Создание устройства не будет выполнено, если Windows SDK не установлен на компьютере, на котором запущен код.

Вот несколько различных вариантов, которые позволят вам разблокировать себя. Любой из них должен дать вам желаемый результат:

  • Создайте пакет Release и разверните его вместо пакета Debug.

  • или - Перейдите на сайт DirectXBase.cpp и удалите из кода флаг D3D11_CREATE_DEVICE_DEBUG.

  • или - Установите средства удаленной отладки для Visual Studio на целевые компьютеры.Это позволит установить необходимые компоненты SDK для создания устройств отладки D3D. Другая интересная вещь об этом варианте заключается в том, что после того, как вы настроите, вам не придется создавать пакеты вручную и загружать их больше. Просто сообщите Visual Studio имя вашего устройства ARM и нажмите F5, чтобы развернуть его удаленно. Более подробная информация здесь: http://msdn.microsoft.com/en-us/library/vstudio/bt727f1t.aspx

0

Как вы устанавливаете родную DLL в свой проект? Используете ли вы ссылки на проекты? Можете ли вы проверить, что ваша DLL заканчивается в конечном пакете, в корне каталога приложений пакета?

Рекомендую использовать Sysinternals Procmon, чтобы посмотреть загрузку приложения на целевую машину. Если он сбой или сбои, вы можете посмотреть в истории журнала, для которого DLL пытается загрузить и сбой. Обычно это будет отображаться как повторяющаяся серия пробных нагрузок DLL (он попытается загрузить DLL из каталога приложений, а затем приступить к использованию нескольких других путей).

Смежные вопросы