Развертывание боковой загрузки приложения Windows 8 Metro

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

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

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

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

Чтобы было ясно, процесс, который я использую для сборки, идет в «Проект» -> «Магазин» -> «Создать пакеты приложений» и выбирает вариант «Нет» для загрузки в Магазин Windows.

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

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


person mcwadar    schedule 19.10.2012    source источник
comment
Просто побочный вопрос, но: можете ли вы запустить проект на тестовой машине из Visual Studio? Например, можно ли запустить приложение, не развертывая его как отдельный пакет?   -  person Den Delimarsky    schedule 20.10.2012
comment
Да, любой из их компьютеров, на которых уже установлена ​​Visual Studio, может запустить проект в Visual Studio. Кроме того, как только они запускаются из Visual Studio, метод Powershell Deployment работает нормально. Кажется, что запуск в Visual Studio делает что-то, что заставляет все работать. Однако это не является приемлемым вариантом для всех людей, которым мне нужно передать приложение.   -  person mcwadar    schedule 24.10.2012


Ответы (3)


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

Удачи!

person msplants    schedule 22.10.2012
comment
Я только что попробовал Metro Sideloader, как вы предложили, и, похоже, он не работает. Я скачал exe, запустил от имени администратора и следовал инструкциям на странице. Все, казалось, установилось правильно, и приложение сообщило об успехе. Однако приложение так и не появилось на плиточном экране и не было найдено в разделе «Все приложения». На данный момент я думаю, что просто подожду еще несколько дней, пока не выйдут планшеты RT, и попытаюсь получить внутреннюю сборку для них. Это действительно то, на что я собираюсь ориентироваться в любом случае. Спасибо за предложение. - person mcwadar; 24.10.2012

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

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

  • Создайте пакет выпуска и разверните его вместо пакета отладки.

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

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

person treckle    schedule 31.12.2012

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

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

person Andy Rich    schedule 04.03.2013