Приложение не может загрузить сборку Win32 из WinSxS

У меня есть сборка Win32 (оболочка C ++ / CLI поверх моего кода .NET), которая должна быть установлена ​​в WinSxS и на которую должны ссылаться клиентские приложения с помощью API. Я немного изучил, как установить сборку Win32 в WinSxS, и, наконец, смог сделать это с помощью файлов mainfest и catalog.

Теперь проблема в том, что я не могу использовать сборку из консольного приложения, которое я создал для тестирования. Я добавил <dependency> раздел exe манифеста для ссылки на сборку (показанную ниже), но она не работает.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity name="MyAssembly" processorArchitecture="x86" publicKeyToken="10f783dc6145a3s0" type="win32" version="1.0.0.58">
</assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>

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

При проверке с помощью Procmon выясняется, что исполняемый файл ищет только dll в расположении исполняемого файла и во всех местоположениях, указанных в переменной среды Path. Когда я поместил WinSxS расположение DLL в переменную Path и запустил приложение, оно работало правильно. Интересно, есть ли какие-либо другие настройки проекта, которые я пропускаю при создании exe-манифеста, вызывающего проблему. Идеи?

2

Решение

Проблема оказалась в настройке проекта UAC. Если для свойства UAC установлено значение Нет, проблема решена, и приложение теперь может загружать сборку без необходимости использовать обходные пути, такие как добавление к переменной PATH.

0

Другие решения


По вопросам рекламы [email protected]