Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline ssladkov  
#1 Оставлено : 16 октября 2010 г. 7:29:11(UTC)
ssladkov

Статус: Участник

Группы: Участники
Зарегистрирован: 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?
Offline Павел Смирнов  
#2 Оставлено : 17 ноября 2010 г. 12:15:27(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Вам достаточно скомпилировать приложение с ключом /D ISOLATION_AWARE_ENABLED=1. Тогда вызов LoadLibrary активирует нужный контекст активации перед фактической загрузкой cades.dll.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline krasnov  
#3 Оставлено : 9 августа 2011 г. 13:47:47(UTC)
krasnov

Статус: Участник

Группы: Участники
Зарегистрирован: 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 при компиляции присутствует.

Подскажите какими методами можно еще воздействовать на компонент?
Не хочется иметь две версии компонента.
Offline Павел Смирнов  
#4 Оставлено : 9 августа 2011 г. 14:11:06(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 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.

Подробнее см. здесь.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline krasnov  
#5 Оставлено : 9 августа 2011 г. 16:33:35(UTC)
krasnov

Статус: Участник

Группы: Участники
Зарегистрирован: 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

в результате работает по второму варианту
Цитата:
на машине с кадес - длл не находит
на машине без кадес - все работает
Offline Павел Смирнов  
#6 Оставлено : 9 августа 2011 г. 17:06:05(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Константа RT_MANIFEST определена при компиляции .rc-файла (для этого можно, например, включить WinUser.h)?
Техническую поддержку оказываем тут.
Наша база знаний.
Offline krasnov  
#7 Оставлено : 9 августа 2011 г. 18:43:21(UTC)
krasnov

Статус: Участник

Группы: Участники
Зарегистрирован: 08.10.2010(UTC)
Сообщений: 25

Сказал(а) «Спасибо»: 1 раз
в начале rc файла написал
Код:
#define RT_MANIFEST 24

скопировал из WinUser.h, но на работу компонента это не повлияло Think
Offline Павел Смирнов  
#8 Оставлено : 12 августа 2011 г. 17:58:45(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Пришлите полученную dll посмотреть.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Павел Смирнов  
#9 Оставлено : 16 августа 2011 г. 15:26:47(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
У Вас в файле получилось два манифеста: с идентификатором 2 и с идентификатором 3. Манифест с идентификатором 2 имеет приоритет, поэтому его необходимо отключить.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline krasnov  
#10 Оставлено : 16 августа 2011 г. 21:02:16(UTC)
krasnov

Статус: Участник

Группы: Участники
Зарегистрирован: 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 ?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.