XBAP использует неуправляемый COM-сервер c ++, проблема параллельного развертывания - PullRequest
0 голосов
/ 27 октября 2009

Я сталкиваюсь со следующей ситуацией: Я создал простое приложение XBAP с полным доверием, которое ссылается на неуправляемый COM-сервер C ++ (изолированный).

После развертывания я ожидаю, что приложение XBAP обнаружит dll COM-сервера, который находится в том же каталоге, но это не так. Я получаю следующую ошибку:

Исключение было сгенерировано целью вызова. ---> System.Runtime.InteropServices.COMException (0x80040154): получение фабрики классов COM для компонента с CLSID {970599E0-2673-11D3-A8A8-00105AA943DF} не удалось из-за следующей ошибки: 80040154. в Generation888.Generation888.Simple (Int32 номер1, Int32 номер2)

Я проверил, что папка, в которой была развернута XBAP, содержит манифест DLL и XBAP, который содержит правильный CLSID

Если я создал простое приложение Windows Form на C # и ссылается на ту же COM-библиотеку DLL, она работает нормально.

У меня вопрос, поддерживает ли XBAP механизм Side-by-Side.

Спасибо

1 Ответ

1 голос
/ 01 декабря 2009

Я не очень знаком с XBAP, так что это некоторые общие предложения. Если ваша XBAP на самом деле запускается как отдельный исполняемый файл, так как он полностью доверяет (что говорит taskmgr?), Попробуйте использовать инструмент «sxstrace.exe» из командной строки с повышенными привилегиями в Windows Vista или более поздней версии, чтобы определить, является ли манифест XBAP на самом деле интерпретируется системой. Возможно, что если вы впервые попробовали свое приложение без манифеста или изменили манифест, система кэшировала эту старую информацию, и вам необходимо очистить этот кэш состояния манифеста, коснувшись метки времени как манифеста, так и исполняемого файла.

Также возможно, что ваш исполняемый файл имеет встроенный манифест, что будет означать, что внешний манифест игнорируется. Чтобы проверить это, откройте исполняемый файл в Visual Studio и посмотрите, есть ли у него ресурс RT_MANIFEST с идентификатором 1.

...