Внешний компонент создал исключение как исправить

I have a ASP.NET website using C# that calls a C++ method using DLLImport. Everything was working fine and suddenly I keep getting this error:

External component has thrown an exception. Description: An unhandled
exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and
where it originated in the code.

Exception Details: System.Runtime.InteropServices.SEHException:
External component has thrown an exception.

Source Error: An unhandled exception was generated during the
execution of the current web request. Information regarding the origin
and location of the exception can be identified using the exception
stack trace below.

lhan's user avatar

lhan

4,56511 gold badges59 silver badges105 bronze badges

asked Mar 15, 2011 at 23:48

InfoLearner's user avatar

InfoLearnerInfoLearner

14.9k19 gold badges75 silver badges122 bronze badges

7

Obviously, exception is originating somewhere in C++ code. See this to understand SEHException. You can use ErrorCode property to get the actual error. If its a common HRESULT code, you can get details by searching over internet, if its some custom code then you probably had to contact C++ component author for more details.

answered Mar 16, 2011 at 4:05

VinayC's user avatar

8

Как следует диагностировать ошибку SEHException — Внешний компонент вызвал исключение

Каждый раз, когда пользователь сообщает об ошибке, например

System.Runtime.InteropServices.SEHException — Внешний компонент вызвал исключение?

Могу ли я, как программист, что-нибудь сделать, чтобы определить причину?

Сценарий: об этой ошибке сообщил один пользователь (использующий программу, написанную моей компанией). Это могло быть или не быть разовой ошибкой. Они упомянули, что за последний месяц компьютер дважды «переставал работать». На собственном опыте я научился не понимать это описание слишком буквально, поскольку обычно это означает, что кто-то, имеющий отношение к компьютеру, работает не так, как ожидалось. Они не смогли предоставить мне более подробную информацию, и я не смог найти никаких зарегистрированных ошибок. Следовательно, это могла быть или не быть эта ошибка.

Из трассировки стека фактическая ошибка возникла при создании класса, который напрямую не вызывает какой-либо код взаимодействия, но, возможно, осложнен тем, что объект может быть частью списка, привязанного к DevExpress Grid.

Ошибка была «поймана» подпрограммой необработанного исключения, которая обычно закрывает программу, но имеет возможность игнорировать и продолжить. Если они решили проигнорировать ошибку, программа продолжала работать, но ошибка возникла снова при следующем запуске этой процедуры. Однако после закрытия и перезапуска нашего приложения этого не произошло.

Рассматриваемый компьютер, похоже, не был перегружен. Он работает под управлением Vista Business, имеет 2 ГБ памяти и, согласно диспетчеру задач, он использовал только около половины этой памяти с нашим приложением, всего около 200 МБ.

Есть еще одна информация, которая может иметь или не иметь отношения к делу. В другом разделе той же программы используется сторонний компонент, который по сути представляет собой оболочку dotnet вокруг собственной библиотеки DLL, и у этого компонента есть известная проблема, при которой очень иногда вы получаете

Попытка прочитать или записать в защищенную память. Это часто указывает на то, что другая память повреждена.

Производители компонентов говорят, что это было исправлено в последней версии их компонентов, которые мы используем внутри компании, но это еще не было передано заказчику.

Учитывая, что последствия ошибки незначительны (работа не теряется, перезапуск программы и возвращение туда, где они были, занимает не более минуты) и учитывая, что заказчик вскоре получит новую версию (с обновленной третьей- party), я, очевидно, могу скрестить пальцы и надеяться, что ошибка больше не повторится.

Источник

Что значит внешний компонент создал исключение

Я создал консольное приложение (32-разрядное) на Visual C++ 2008, производящее математические вычисления. (Операционная среда—Windows 7, 32-разрядная).
В моём приложении происходят выделения динамической памяти с помощью new[] и её последующее удаление (после работы с ней) с помощью []delete.

Вроде бы всем выделениям динамической памяти соответствуют последующие их удаления.
Но после выполнения 370-ой вычислительной итерации в отладчике появляется окно:

Необработанное исключение типа «System.Runtime.InteropServices.SEHException» произошло в Cflculftion.exe

Дополнительные сведения: Внешний компонент создал исключение.

на чём программа и зависает.

Что означает это исключение? Можно ли его как-то обойти или обработать? (В рамках 32-разрядного консольного приложения).
Или же следует поменять какие-то настройки программы?

От: Кодт
Дата: 07.11.14 14:43
Оценка:

Здравствуйте, RussianFellow, Вы писали:

RF>Необработанное исключение типа «System.Runtime.InteropServices.SEHException» произошло в Cflculftion.exe

Где-то в недрах подключенной библиотеки сработала защита памяти.
Каким боком здесь дотнет, непонятно. То ли экзешник на C++/CLI, то ли библиотека дотнетовская подключена к обычному экзешнику.

RF>Что означает это исключение? Можно ли его как-то обойти или обработать? (В рамках 32-разрядного консольного приложения).
RF>Или же следует поменять какие-то настройки программы?

Надо не обходить, а устранить. Это исключение — следствие расстрела памяти.

Включи в студии, в меню Debug > Exceptions. галочки в колонке Thrown, и поймай момент броска.
Потому что, когда исключение должно пересечь границы модулей (границу дотнетовского/неуправляемого кода), оно там ловится и перебрасывается, а уже в вызывающей стороне нет ни try-catch, ни __try/__except/__finally, и поэтому лишь тогда сработал дефолтный панический обработчик.

Даже если исходники модуля, где это всё рухнуло, недоступны, — можно хотя бы понять, на каких входных данных он дал сбой. Может, ошибка в них, а не в модуле.
Ну или если расстрел памяти произошёл чуть раньше, а модуль только наступил на эту мину.

Кстати, советую вместо ручной работы с голыми указателями и new[]/delete[] использовать контейнеры — тот же vector. Меньше шансов что-то напутать и поломать.

От: uzhas
Дата: 07.11.14 15:00
Оценка: 35 (1) +2

Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, RussianFellow, Вы писали:

RF>>Необработанное исключение типа «System.Runtime.InteropServices.SEHException» произошло в Cflculftion.exe

К>Это исключение — следствие расстрела памяти.

тебя смутил SEH
исключение типа «System.Runtime.InteropServices.SEHException» выстреливает при всех «плюсовых» (в терминах студии) исключениях (std::exception или access violation), они в студии как раз через SEH реализованы.
так что все может быть гораздо прозаичнее:
была написана программа на С++, но в свойствах проекта указали CLI
вылетело плюсовое исключение и вот так себя проявило в виде System.Runtime.InteropServices.SEHException

совет: переделать проект на чисто плюсовый (C++ без CLI и clr)

От: Pavel Dvorkin
Дата: 08.11.14 04:01
Оценка: +1

Здравствуйте, uzhas, Вы писали:

U>исключение типа «System.Runtime.InteropServices.SEHException» выстреливает при всех «плюсовых» (в терминах студии) исключениях (std::exception или access violation), они в студии как раз через SEH реализованы.

Маленькое уточнение : не в студии, а в библиотеке. throw C++ реализован как RaiseException с пользовательским кодом.

U>совет: переделать проект на чисто плюсовый (C++ без CLI и clr)

Совершенно верно. После этого ТС получит просто свой законнный Unhandled Exception. Будет ли ему от этого легче, я правда, не знаю.

От: Ops
Дата: 08.11.14 17:32
Оценка: +2

Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Совершенно верно. После этого ТС получит просто свой законнный Unhandled Exception. Будет ли ему от этого легче, я правда, не знаю.

Мне бы точно стало легче, отладка смеси нативного и управляемого кода всегда была для меня чем-то вроде шаманства.

От: landerhigh http://www.blinnov.com
Дата: 09.11.14 22:53
Оценка:

Здравствуйте, Ops, Вы писали:

Ops>Мне бы точно стало легче, отладка смеси нативного и управляемого кода всегда была для меня чем-то вроде шаманства.

+1. В случае качественного такого расстрела памяти или профессиональной порчи стека в собственно момент перехода на темную сторону (managed) случаются дополнительные спецэффекты.

От: Ops
Дата: 10.11.14 02:32
Оценка:

Здравствуйте, landerhigh, Вы писали:

L>Здравствуйте, Ops, Вы писали:

Ops>>Мне бы точно стало легче, отладка смеси нативного и управляемого кода всегда была для меня чем-то вроде шаманства.

L>+1. В случае качественного такого расстрела памяти или профессиональной порчи стека в собственно момент перехода на темную сторону (managed) случаются дополнительные спецэффекты.

От: RussianFellow http://russianfellow.livejournal.com
Дата: 10.11.14 10:06
Оценка:

Здравствуйте, uzhas, Вы писали:

U>совет: переделать проект на чисто плюсовый (C++ без CLI и clr)

А в каких разделах свойства проекта это можно сделать?

От: uzhas
Дата: 10.11.14 11:36
Оценка:

Здравствуйте, RussianFellow, Вы писали:

RF>А в каких разделах свойства проекта это можно сделать?

От: RussianFellow http://russianfellow.livejournal.com
Дата: 10.11.14 13:23
Оценка:

Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, RussianFellow, Вы писали:

RF>>А в каких разделах свойства проекта это можно сделать?

U>http://stackoverflow.com/questions/7232535/build-dll-without-clr-option

Там написано, как сбросить clr .
А как сбросить CLI ?

От: RussianFellow http://russianfellow.livejournal.com
Дата: 10.11.14 13:28
Оценка:
От: Кодт
Дата: 10.11.14 13:58
Оценка:

Здравствуйте, RussianFellow, Вы писали:

RF>Расстрел памяти—это удаление ранее выделенной памяти (delete—new, free—malloc) или же потеря этой памяти вследствие той или иной причины?

Это что угодно.
Самые типичные паттерны:

Это всё — UB, кроме (*), которое не UB, если Base с виртуальным деструктором.

Но можно же и просто расстрелять:

От: uzhas
Дата: 10.11.14 14:32
Оценка:
От: RussianFellow http://russianfellow.livejournal.com
Дата: 10.11.14 14:46
Оценка:

У меня в программе динамическая память используется в классе Matrixes, в котором поля n, m—тип int (соответственно число строк и число столбцов).
И есть в этом классе также поле massif типа pldouble, где pldouble—тип long double* .
Память в классе Matrixes выделяется либо с помощью конструктора, либо с помощью функции AllocateMemory. В обоих случаях сперва происходит

а после этого поле massif заполняется нулями:

Есть также и конструктор без параметров—в этом случае

Удаление памяти происходит либо в деструкторе, либо в функции CleanMassif. В обоих случаях происходит проверка, чтобы massif не был равным NULL.
Если massif не равен NULL , то тогда

Если massif равен NULL, то тогда никаких delete не происходит, а просто ставится n = 0 и m = 0 .

Класс Matrixes предназначен для работы с двумерными матрицами. В нём перегружен оператор = для присвоения значений из одной матрицы для другой матрицы, а также есть функции для умножения матрицы на число, сложения матриц, вычитания матриц, транспонирования матриц, нахождения обратной матрицы, перемножения матриц. Больше нигде в моей программе работа с new и delete не происходит (а malloc и free вообще нет в моей программе).

Судя по отладчику, моя программа бьётся на 388-ой (или какой там) итерации в конструкторе класса Matrixes. То есть создаётся впечатление, что программе будто бы не хватает оперативной памяти для выделения массива.

Можно ли как-то исправить это положение?
Ведь до 388-ой итерации программа работает, и работает нормально—всё правильно считает, выдаёт правильные результаты.
Просто на каком-то её этапе выполнения появляется нехватка оперативной памяти.

От: Кодт
Дата: 10.11.14 16:15
Оценка:

Здравствуйте, RussianFellow, Вы писали:

RF>У меня в программе динамическая память используется в классе Matrixes, в котором поля n, m—тип int (соответственно число строк и число столбцов).
RF>И есть в этом классе также поле massif типа pldouble, где pldouble—тип long double* .

Тебе принципиально использовать голый массив голых массивов?
Вот так будет в разы короче

RF>Судя по отладчику, моя программа бьётся на 388-ой (или какой там) итерации в конструкторе класса Matrixes. То есть создаётся впечатление, что программе будто бы не хватает оперативной памяти для выделения массива.

Может быть, и памяти не хватает, из-за фрагментации кучи или из-за прожорливости задачи.
Сделай try <. >catch(bad_alloc) — и узнаешь.

RF>Можно ли как-то исправить это положение?
RF>Ведь до 388-ой итерации программа работает, и работает нормально—всё правильно считает, выдаёт правильные результаты.
RF>Просто на каком-то её этапе выполнения появляется нехватка оперативной памяти.

Если дело действительно в прожорливости задачи, то переписать алгоритм.
Возможно, там возникает куча ненужных объектов: вычислил и выбросил, а не очистил/удалил. Ну так очищай/удаляй.
Возможно, практикуешь ручную очистку вместо того, чтоб возложить её на деструктор. И, соответственно, где-то забываешь очищать (например, при копировании или в сложных выражениях). Перепиши с деструкторами.

От: jazzer Skype: enerjazzer
Дата: 10.11.14 17:16
Оценка:

Здравствуйте, RussianFellow, Вы писали:

RF>Память в классе Matrixes выделяется либо с помощью конструктора, либо с помощью функции AllocateMemory. В обоих случаях сперва происходит

RF>
RF>затем
RF>

на этом месте у меня вытек левый глаз

Тебе не приходило в голову взять нормальную библиотеку для работы с матрицами и не городить весь этот ад?
Их же навалом, нормальных, оттестированных, без утечек и расстрелов памяти. зачем ты всю эту вышеприведенную ересь пишешь? Грех это, нехорошо.

ЗЫ Имхо, если ты напишешь свои расчеты на Питоне в NumPy, они будут работать быстрее, чем то, чем ты нас тут радуешь.
И падать не будет.

От: RussianFellow http://russianfellow.livejournal.com
Дата: 12.11.14 09:11
Оценка:

Кодт, я сделал почти так, как Вы сказали—в классе Matrix вместо new я ввёл vector (одномерный), который и содержит элементы матрицы.

Программа считает, но сейчас уже она бьётся на 467-ой итерации, а не на 388-ой.
В чём же дело? Может быть, в прожорливости программы—и мне надо будет внимательно смотреть за очисткой ресурсов, за вызовом метода clear у моих векторов?
Или же дело в том, что мне нужно что-то поменять в настройках проекта?

От: Кодт
Дата: 12.11.14 10:05
Оценка:

Здравствуйте, RussianFellow, Вы писали:

RF>Программа считает, но сейчас уже она бьётся на 467-ой итерации, а не на 388-ой.
RF>В чём же дело? Может быть, в прожорливости программы—и мне надо будет внимательно смотреть за очисткой ресурсов, за вызовом метода clear у моих векторов?
RF>Или же дело в том, что мне нужно что-то поменять в настройках проекта?

Никакая очистка ресурсов не поможет, если у тебя алгоритм прожорливый.

Может, ты там мемоизируешь всё подряд без оглядки на то, пригодится ли значение в будущем или нет.
Может, создаёшь очередь вычислений (например, при обходе вширь), которая слишком быстро распухает, быстрее, чем ты её обрабатываешь.
Может, возникает сверхглубокая рекурсия с очень тяжёлыми локальными переменными.
Может быть, эти сверхтяжёлые переменные пухнут не линейно, а всплесками — на 388 и 467 итерациях. Какие-то аналоги проблемы 3X+1, например.

И ещё стопятьсот антипаттернов «как убить всю память, не играя в утечки».

От: RussianFellow http://russianfellow.livejournal.com
Дата: 12.11.14 13:03
Оценка:

Здравствуйте, Кодт, Вы писали:

К>Никакая очистка ресурсов не поможет, если у тебя алгоритм прожорливый.

К>Может, ты там мемоизируешь всё подряд без оглядки на то, пригодится ли значение в будущем или нет.
К>Может, создаёшь очередь вычислений (например, при обходе вширь), которая слишком быстро распухает, быстрее, чем ты её обрабатываешь.
К>Может, возникает сверхглубокая рекурсия с очень тяжёлыми локальными переменными.
К>Может быть, эти сверхтяжёлые переменные пухнут не линейно, а всплесками — на 388 и 467 итерациях. Какие-то аналоги проблемы 3X+1, например.

К>И ещё стопятьсот антипаттернов «как убить всю память, не играя в утечки».

Что Вы посоветуйте мне сделать, чтобы решить эту проблему?

От: landerhigh http://www.blinnov.com
Дата: 12.11.14 13:27
Оценка:

Здравствуйте, RussianFellow, Вы писали:

К>>И ещё стопятьсот антипаттернов «как убить всю память, не играя в утечки».

RF>Что Вы посоветуйте мне сделать, чтобы решить эту проблему?

Переписать алгоритм так, чтобы память выделялась ровно один раз на все время его работы.

Источник

Здравствуйте.Всегда при попытке запуска игры вылетает табличка «Платформа
microsoft.NET Framework
— необрабатываемое исключение в
приложении. При нажатии кнопки «Продолжить» приложение проигнорирует ошибку и попытаетеся продолжить работу. При нажатии кнопки «выход» приложение немедленно завершит работу.

Подробная информация об использовании оперативной

(JIT) отладки вместо данного диалогового

окна содержится в конце этого сообщения.

************** Текст исключения **************

System.Runtime.InteropServices.SEHException: Внешний компонент создал исключение.

   в BmLauncherLib.PhysXSDK.{ctor}(PhysXSDK* )

   в BmLauncherUtils.PhysXSDK..ctor()

   в BmLauncher.Settings.DetermineDefaultPhysXLevel()

   в BmLauncher.Settings.StaticInitialise(IniFile iniFile, IniFile iniEng, IniFile iniInst, SystemInfo sysInfo, String localePath, String localeConfigFile)

   в BmLauncher.Form1.Initialise()

   в BmLauncher.Form1.OnLoad(Object sender, EventArgs e)

   в System.Windows.Forms.Form.OnLoad(EventArgs e)

   в System.Windows.Forms.Form.OnCreateControl()

   в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

   в System.Windows.Forms.Control.CreateControl()

   в System.Windows.Forms.Control.WmShowWindow(Message& m)

   в System.Windows.Forms.Control.WndProc(Message& m)

   в System.Windows.Forms.ScrollableControl.WndProc(Message& m)

   в System.Windows.Forms.ContainerControl.WndProc(Message& m)

   в System.Windows.Forms.Form.WmShowWindow(Message& m)

   в System.Windows.Forms.Form.WndProc(Message& m)

   в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

   в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Загруженные сборки **************

mscorlib

    Версия сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5485 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

—————————————-

BmLauncher

    Версия сборки: 1.0.1.0

    Версия Win32: 1.0.1.0

    CodeBase: file:///C:/Program%20Files%20(x86)/Origin%20Games/Batman%20Arkham%20Asylum%20Game%20of%20the%20Year%20Edition/Binaries/BmLauncher.exe

—————————————-

System.Windows.Forms

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5491 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

—————————————-

System

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5485 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll

—————————————-

System.Drawing

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5491 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

—————————————-

System.Management

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5483 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Management/2.0.0.0__b03f5f7f11d50a3a/System.Management.dll

—————————————-

BmLauncherUtils

    Версия сборки: 1.0.0.0

    Версия Win32: 1.0.1.0

    CodeBase: file:///C:/Program%20Files%20(x86)/Origin%20Games/Batman%20Arkham%20Asylum%20Game%20of%20the%20Year%20Edition/Binaries/BmLauncherUtils.DLL

—————————————-

msvcm80

    Версия сборки: 8.0.50727.6195

    Версия Win32: 8.00.50727.6195

    CodeBase: file:///C:/Windows/WinSxS/x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a/msvcm80.dll

—————————————-

Microsoft.DirectX.Direct3D

    Версия
сборки: 1.0.2902.0

    Версия Win32: 9.05.132.0000

    CodeBase: file:///C:/Windows/assembly/GAC/Microsoft.DirectX.Direct3D/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.Direct3D.dll

—————————————-

System.Xml

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5485 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll

—————————————-

mscorlib.resources

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5485 (Win7SP1GDR.050727-5400)

    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

—————————————-

System.Windows.Forms.resources

    Версия
сборки: 2.0.0.0

    Версия Win32: 2.0.50727.5420 (Win7SP1.050727-5400)

    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll

—————————————-

************** Оперативная отладка (JIT) **************

Для подключения оперативной (JIT) отладки файл .config данного

приложения или компьютера (machine.config) должен иметь

значение jitDebugging, установленное в секции system.windows.forms.

Приложение также должно быть скомпилировано с включенной

отладкой.

Например:

<configuration>

    <system.windows.forms jitDebugging=»true» />

</configuration>

При включенной отладке JIT любое необрабатываемое исключение

пересылается отладчику JIT, зарегистрированному на данном компьютере,

вместо того чтобы обрабатываться данным диалоговым окном.


Offline

MZ_st

 


#1
Оставлено
:

12 ноября 2012 г. 18:10:38(UTC)

MZ_st

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

Группы: Участники

Зарегистрирован: 12.11.2012(UTC)
Сообщений: 13

Отредактировано пользователем 16 ноября 2012 г. 8:58:01(UTC)
 | Причина: Не указана


Вверх


Offline

MZ_st

 


#2
Оставлено
:

13 ноября 2012 г. 15:12:21(UTC)

MZ_st

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

Группы: Участники

Зарегистрирован: 12.11.2012(UTC)
Сообщений: 13

В каком направлении копать на Send вылетает

byte* TSPServSupp::RequestTS(byte* in, int dsize)
{
byte* res = NULL;

CryptoPro::PKI::TSP::Client::CRequest* req = new CryptoPro::PKI::TSP::Client::CRequest();
CryptoPro::PKI::TSP::Client::CStamp stamp;
req->put_TSAAddress(L»http://www.cryptopro.ru/tsp/tsp.srf»);
req->put_DataHashAlg(szOID_CP_GOST_R3411);
req->AddData(in, dsize);

HCERTSTORE hst = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL,CERT_SYSTEM_STORE_CURRENT_USER, L»MY»);

PCCERT_CONTEXT pCert = CryptUIDlgSelectCertificateFromStore(hst, NULL, L»SELECT A CERTIFICATE», L»WHERE TO DO»,0, 0, NULL);

req->put_ClientCertificate(pCert);
stamp = req->Send(false);

return res;
}
на платформе х64
MSVStudio 2008 выдает сообщение о ошибке:
Microsoft Visual C++ Runtime Library

Runtime Error!

This application has requested the runtime to terminate it in an unusual way.
Please contact the application’s support team for more information.

на платформе х32

System.Runtime.InteropServices.SEHException was unhandled
Message=»Внешний компонент создал исключение.»
Source=»CSPServ»
ErrorCode=-2147467259
StackTrace:
в CryptoPro.PKI.TSP.Client.CRequest.Send(CRequest* , Boolean )
в CSPServ.TSPServSupp.RequestTS(Byte* in, Int32 dsize) в f:projectsvcs2008 projectssyrwscspservcspserv.cpp:строка 46
в SDClient.Form1..ctor() в F:PROJECTSVCS2008 PROJECTSSyRWSSDClientForm1.cs:строка 36
в SDClient.Program.Main() в F:PROJECTSVCS2008 PROJECTSSyRWSSDClientProgram.cs:строка 18
в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException:

HRESULT 0x080004005 — Unspecified failure.Brick wall

tsputil — выдает ошибку 0хС2100100,
c:Program Files (x86)Crypto ProSDKbin>tsputil sendreq —format=base64 —url=
http://tsp.pkitrans.ru/tspca1_niias/tsp.srf e:test.tsq e:stamp.tsr
HTTP status: 407
Exception: 0xC2100100 При попытке отправки запроса возникла ошибка HTTP
[ReturnCode: 0xC2100100]

c:Program Files (x86)Crypto ProSDKbin>tsputil sendreq —format=base64 —url=
http://www.cryptopro.ru/tsp/tsp.srf e:test.tsq e:stamp.tsr
HTTP status: 407
Exception: 0xC2100100 При попытке отправки запроса возникла ошибка HTTP
[ReturnCode: 0xC2100100]

использую http://www.cryptopro.ru/cadesplugin/Default.aspx — таже ошибка.

Крипто про CSP 3,6,5402 с лицензией до 03,10,2013
сертификат с улучшенным ключом
Проверка подлинности клиента (1.3.6.1.5.5.7.3.2)
Защищенная электронная почта (1.3.6.1.5.5.7.3.4)
Пользователь Центра Регистрации, HTTP, TLS клиент (1.2.643.2.2.34.6)
Неизвестное использование ключа (1.2.643.3.37.2.1.1.1)

Никто не наступал на эти грабли что-ли?

Отредактировано пользователем 16 ноября 2012 г. 10:45:54(UTC)
 | Причина: Не указана


Вверх


Offline

Новожилова Елена

 


#3
Оставлено
:

16 ноября 2012 г. 17:20:03(UTC)

Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах

HTTP status 407: Proxy Authentication Required

У вас подключение к сети через прокси-сервер?


Вверх


Offline

MZ_st

 


#4
Оставлено
:

19 ноября 2012 г. 9:40:36(UTC)

MZ_st

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

Группы: Участники

Зарегистрирован: 12.11.2012(UTC)
Сообщений: 13

Да, проксик есть. Спасибо. tsputil отрабатывает, но в коде при попытке отправки происходит исключение SEHExeption was unhandled.

byte* TSPServSupp::RequestTS(byte* in, int dsize)
{
byte* res = NULL;

CryptoPro::PKI::TSP::Client::CRequest* req = new CryptoPro::PKI::TSP::Client::CRequest();
CryptoPro::PKI::TSP::Client::CStamp stamp;
req->put_TSAAddress(L»http://www.cryptopro.ru/tsp/tsp.srf»);
req->put_DataHashAlg(szOID_CP_GOST_R3411);
req->put_TSAAuthType(CryptoPro::PKI::TSP::Client::CRequest::atNTLM);
req->put_ProxyAddress(L»http://webproxy.dy.droot.org:8080″);
req->put_ProxyPassword(L»*****»);
req->put_ProxyUserName(L»*****»);
req->put_CertReq(true);

req->AddData(in, dsize);

HCERTSTORE hst = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL,CERT_SYSTEM_STORE_CURRENT_USER, L»MY»);

PCCERT_CONTEXT pCert = CryptUIDlgSelectCertificateFromStore(hst, NULL, L»SELECT A CERTIFICATE», L»WHERE TO DO»,0, 0, NULL);

req->put_ClientCertificate(pCert);
byte* d;
ULONG ds;

req->Export(NULL, &ds);
d = new byte[ds]();
req->Export(d, &ds);
try
{
stamp = req->Send(true);
}
catch(Exception^ ex)
{
int a = 0;
}

сертификат тестовый от крипто про
улучшенный ключ
Установка отметки времени (1.3.6.1.5.5.7.3.8)

Отредактировано пользователем 19 ноября 2012 г. 10:38:09(UTC)
 | Причина: Не указана


Вверх


Offline

Новожилова Елена

 


#5
Оставлено
:

19 ноября 2012 г. 16:24:31(UTC)

Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах

Цитата:

Код:

req->put_TSAAuthType(CryptoPro::PKI::TSP::Client::CRequest::atNTLM);

Может put_ProxyAuthType?


Вверх


Offline

MZ_st

 


#6
Оставлено
:

20 ноября 2012 г. 9:14:14(UTC)

MZ_st

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

Группы: Участники

Зарегистрирован: 12.11.2012(UTC)
Сообщений: 13

Новожилова Елена написал:

Цитата:

Код:

req->put_TSAAuthType(CryptoPro::PKI::TSP::Client::CRequest::atNTLM);

Может put_ProxyAuthType?

пробовал так. все равно слетает на Send. пробовал убирать сертификат. Ошибка все равно возникает. Но без сертификата HTTP status 200 — OK, а c сертификатом 0.

Причем если методом Display формирую файл запроса, потом его подставляю в tsputil — получаю штамп времени даже указывая сертификат.

Отредактировано пользователем 20 ноября 2012 г. 14:37:25(UTC)
 | Причина: Не указана

Вложение(я):

stamp.tsr (2kb) загружен 2 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.


Вверх


Offline

Новожилова Елена

 


#7
Оставлено
:

20 ноября 2012 г. 20:14:31(UTC)

Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах

MZ_st написал:

Новожилова Елена написал:

Код:

req->put_TSAAuthType(CryptoPro::PKI::TSP::Client::CRequest::atNTLM);

Может put_ProxyAuthType?

пробовал так. все равно слетает на Send. пробовал убирать сертификат. Ошибка все равно возникает.

Служба штампов времени http://www.cryptopro.ru/tsp/tsp.srf поддерживает анонимную аутентификацию. Задавать тип аутентификации CryptoPro::PKI::TSP::Client::CRequest::atNTLM, а также клиентский сертификат для аутентификации на данной службе не нужно.

Если для аутентификации на прокси-сервере вы хотите использовать встроенную проверку подлинности Windows, то указываете

Код:

put_ProxyAuthType(CryptoPro::PKI::TSP::Client::CRequest::atNTLM);

Если логин + пароль — CryptoPro::PKI::TSP::Client::CRequest::atBasic. Типы аутентификации описаны в документации.

MZ_st написал:

Но без сертификата HTTP status 200 — OK, а c сертификатом 0.

HTTP status 200 — OK, но ошибка все равно возникает? Какая ошибка?

MZ_st написал:

Причем если методом Display формирую файл запроса, потом его подставляю в tsputil — получаю штамп времени даже указывая сертификат.

А можно поподробнее про формирование запроса при помощи метода Display?


Вверх


Offline

MZ_st

 


#8
Оставлено
:

21 ноября 2012 г. 9:05:06(UTC)

MZ_st

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

Группы: Участники

Зарегистрирован: 12.11.2012(UTC)
Сообщений: 13

Новожилова Елена написал:

Если для аутентификации на прокси-сервере вы хотите использовать встроенную проверку подлинности Windows, то указываете

Код:

put_ProxyAuthType(CryptoPro::PKI::TSP::Client::CRequest::atNTLM);

Если логин + пароль — CryptoPro::PKI::TSP::Client::CRequest::atBasic. Типы аутентификации описаны в документации.

Такие варианты тоже пробовал.

Новожилова Елена написал:

MZ_st написал:

Но без сертификата HTTP status 200 — OK, а c сертификатом 0.

HTTP status 200 — OK, но ошибка все равно возникает? Какая ошибка?

валится на Send исключение SEH — внешний компонент создал исключение

Новожилова Елена написал:

MZ_st написал:

Причем если методом Display формирую файл запроса, потом его подставляю в tsputil — получаю штамп времени даже указывая сертификат.

А можно поподробнее про формирование запроса при помощи метода Display?

сохраняю в файл *.tsq затем использую файл как входной для tsputil.

Я так понимаю косяк где то в установке или конфигурации sdk? Установлен Windows 7 x64. Пробовал обе платформы проектов х64 и Win32 — ошибка та же.

Отредактировано пользователем 21 ноября 2012 г. 9:28:49(UTC)
 | Причина: Не указана


Вверх


Offline

Новожилова Елена

 


#9
Оставлено
:

21 ноября 2012 г. 16:25:03(UTC)

Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах

MZ_st написал:

валится на Send исключение SEH — внешний компонент создал исключение
Я так понимаю косяк где то в установке или конфигурации sdk? Установлен Windows 7 x64. Пробовал обе платформы проектов х64 и Win32 — ошибка та же.

Нужно лог смотреть.


Вверх


Offline

Павел Смирнов

 


#10
Оставлено
:

21 ноября 2012 г. 16:37:39(UTC)

Павел Смирнов

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

Группы: Администраторы

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах

Ещё можно перехватить исключение и посмотреть на него.

Техническую поддержку оказываем тут.
Наша база знаний.


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Всякий раз, когда пользователь сообщает об ошибке, таких как

системы.Время выполнения.InteropServices.SEHException — внешний компонент создал исключение?

есть что-то, что я как программист могу сделать, чтобы определить причину?

Сценарий : один пользователь (с помощью программы Моя компания написала) сообщил эту ошибку.
Это может или не может быть единичный случай ошибки. Они отметили, что в прошлом месяце, компьютер дважды ‘перестал работать’. Я узнал из опыта, а не принимать это описание слишком буквально, как это обычно означает, что кто-то, касающиеся компьютер не работает, как ожидалось. Они были не в состоянии дать мне больше информации и я не мог найти журнал ошибок. Следовательно, он может или не может быть этой ошибки.

От трассировке стека, фактическая ошибка при создании класса, который не может напрямую вызвать код взаимодействия, но, возможно, осложняется тем, что объект может быть частью списка, что связано с частое сетки.

Ошибка была ‘поймал’ необработанное исключение подпрограмма, которая обычно закроет программу, но есть возможность игнорировать и продолжить. Если они решили игнорировать ошибки, то программа продолжает работать, но ошибка вновь произошла, когда эта процедура была следующего запуска. Однако это не произойдет снова после закрытия и перезапуска приложения.

Компьютер, казалось, не волновалась. Это работает Vista бизнес, имеет 2 ГБ памяти и по данным диспетчера задач только через примерно половина, что с нашим приложением только около 200 Мб.

Есть еще один кусок информации, которая может или не может иметь отношение. Другая часть той же программы использует сторонний компонент, который эффективно обертка dotnet ограничителя вокруг родной DLL и этот компонент имеет известную проблему, где очень изредка, вы получаете

попытка чтения или записи в защищенную память. Часто это означает, что другая память повреждена

Производители говорят, что это было исправлено в последней версии своих компонент, который мы используем в доме, но это не было дано клиентом.

Учитывая, что последствия ошибки низкая (никакая работа не потеряла и перезапуск программы и вернуться туда, где они были всего лишь минуту, не больше) и учитывая, что клиент в скором времени получит новую версию (обновленную стороннего компонента), можно конечно скрестить пальцы и надеяться на ошибку, выиграл’т произойти снова.

Но есть ли что-нибудь еще я могу сделать?

Понравилась статья? Поделить с друзьями:
  • Как можно найти почтовый индекс по адресу
  • Как исправить поступление основных средств за прошлый период
  • Как найти объекты для клининга
  • Как найти человека на ютубе по фото
  • Как составить психологический портрет целевой аудитории