Статус: Участник
Группы: Участники
Зарегистрирован: 15.09.2010(UTC) Сообщений: 19 Откуда: Москва
|
Есть необходимость по требованию подгружать cades.dll (C++ VS2008). В стандартных путях ее нет и LoadLibrary ее не находит. Но при статической линковке все ок, как я понял cades.dll находится благодаря элементу dependentAssembly манифеста. В МСДН написано "If you call LoadLibrary with the name of an assembly without a path specification and the assembly is listed in the system compatible manifest, the call is automatically redirected to the side-by-side assembly." Я так понял что мне нужно указать имя сборки, но "CryptoPro.PKI.CAdES" в качестве параметра LoadLibrary не работает. Итак, как все таки загрузить cades.dll?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Вам достаточно скомпилировать приложение с ключом /D ISOLATION_AWARE_ENABLED=1. Тогда вызов LoadLibrary активирует нужный контекст активации перед фактической загрузкой cades.dll.
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Добрый день! Возникла необходимость заставить работать свой компонент на машинах как с cades.dll(подпись расширенная) так и без него(обычная подпись). При сборке компонента Код:#include "cades.h"
... ...
hCadesDll=LoadLibrary(TEXT("cades.dll"));
на машине с кадес - длл находится и все работает на машине без кадес - ни один метод компонента не работает выходит сообщение Цитата:System.DllNotFoundException: Не удается загрузить DLL "mycomponent.dll": Не удалось запустить приложение, поскольку его параллельная конфигурация неправильна. Дополнительные сведения содержатся в журнале событий приложений или используйте программу командной строки sxstrace.exe для получения дополнительных сведений. (Исключение из HRESULT: 0x800736B1) журнал событий Цитата:Ошибка при создании контекста активации для "D:\projects\mycomponent\bin\Debug\mycomponent.dll". Не найдена зависимая сборка "CryptoPro.PKI.CAdES,language="*",processorArchitecture="x86",publicKeyToken="a6d31b994cfcddc4",type="win32",version="1.0.0.0"". Используйте sxstrace.exe для подробной диагностики. При сборке компонента Код:#define CADES_NOFORCE_MANIFEST
#include "cades.h"
... ...
hCadesDll=LoadLibrary(TEXT("cades.dll"));
на машине с кадес - длл не находит на машине без кадес - все работает Ключ /D ISOLATION_AWARE_ENABLED=1 при компиляции присутствует. Подскажите какими методами можно еще воздействовать на компонент? Не хочется иметь две версии компонента.
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Возможный путь решения: собраться с /D ISOLATION_AWARE_ENABLED=1 /D CADES_NOFORCE_MANIFEST и добавить манифест, содержащий зависимость от ассембли CryptoPro.PKI.CAdES, к mycomponent.dll в виде ресурса RT_MANIFEST с идентификатором 3. Подробнее см. здесь. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Создал манифест mycomponent.manifest с содержимым из сдк Код:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="CryptoPro.PKI.CAdES"
version="1.0.0.0"
processorArchitecture="x86"
publicKeyToken="a6d31b994cfcddc4"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
в rc файле добавил строку Код:3 RT_MANIFEST "mycomponent.manifest"
включил в компиляции /D ISOLATION_AWARE_ENABLED=1 /D CADES_NOFORCE_MANIFEST в результате работает по второму варианту Цитата:на машине с кадес - длл не находит на машине без кадес - все работает
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Константа RT_MANIFEST определена при компиляции .rc-файла (для этого можно, например, включить WinUser.h)? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
в начале rc файла написал скопировал из WinUser.h, но на работу компонента это не повлияло
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Пришлите полученную dll посмотреть. |
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
У Вас в файле получилось два манифеста: с идентификатором 2 и с идентификатором 3. Манифест с идентификатором 2 имеет приоритет, поэтому его необходимо отключить. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Заработало под неуправляемым кодом, но под управляемым(С# через [DllImport("mycomponent.dll")]) все еще не хочет видеть cades.dll. Нашел у Майкрософта статью применительную к C++ и .NET, подскажите в .NET так же надо создать манифест Код:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="CryptoPro.PKI.CAdES"
version="1.0.0.0"
processorArchitecture="x86"
publicKeyToken="a6d31b994cfcddc4"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
и далее по статье вызывать CreateActCtx,ActivateActCtx.. из Kernel32.dll ?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close