Victor_VG
Tracker Mod | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору slay93 Уже догадался. А заодно и mex3 огромное спасибо за идею - с его подсказки я отыскал причину сбоя и могу точно назвать как условия его проявления, так и меры по его предотвращению. Отчёт я ему как и обещал в полном объёме передал, а для остальных привожу его с сокращениями достаточными чтобы понять что происходит. Цитата: Что имеем: Тестовая ОС Win32, версия от 5.1.2600 и выше, ЦПУ х86/х64-86 (произвольный), на х64 не проверял, Far 2.0.1ххх, тестовые плагины Registry Browser 2.19A/3.x.xA(W) и Registry Editor 1.x.x Имеем возможность сборки исходников в различных средах разработки - MS VisualStudio 2008 SR1, GNU GCC 4.x.x (CygWin/MinGW/TDM), все средства разработки имеют последние на сегодня SDK. Методика эксперимента: 1) Открываем две различные файловые панели; 2) На пассивной открываем Реестровую панель испытуемого плагина, на активной произвольный каталог. 3) На реестровой панели открываем произвольный корневой ключ (для уменьшения влияния теста я использовал подключи Undo в [HKCR\Software\...]), выбираем подключ-цель и копируем его на файловую панель. Получаем *.reg-файл. 4) Удаляем подключ-цель в Реестре с подтверждением удаления, на файловой панели его резервную копию не трогаем. 5) Начинаем тестирование: 5.1) GCC сборка, компилятор GCC 4.x TDM SJLJ: попытка копирования по F5/F6/Drag&Drop - плагин Registry Browser v3.x0W (UNICODE), x86: итог любой из операций - исключение по защите памяти (код 0хС0000005, попытка чтения по адресу 0х00000000); 5.2) GCC сборка, компилятор GCC 4.x TDM SJLJ: попытка копирования по F5/F6/Drag&Drop - плагин Registry Browser v2.19A/3.x0A (ANSI), x86: итог любой из операций - выполнено, сбоев нет; 5.3) MS VS 2008 сборка: попытка копирования по F5/F6/Drag&Drop - плагин Registry Browser v2.19A/3.x0A/3.x.0W (ANSI/UNICODE), x86: итог любой из операций - выполнено, сбоев нет; 5.4) Плагин Registry Editor 1.х, компилятор каким мы собирали Far.exe не важен - все операции выполнены, сбоев нет; 5.5) GCC сборка, компилятор GCC 4.x TDM SJLJ: попытка копирования по F5/F6/Drag&Drop - плагин Registry Brouser v3.x0W (UNICODE) + Registry Editor 1.x.x, x86: итог любой из операций - исключение по защите памяти (код 0хС0000005, попытка чтения по адресу 0х00000000); 5.6) GCC сборка, компилятор GCC 4.x TDM SJLJ: попытка копирования по F5/F6/Drag&Drop - плагин Registry Browser v2.19A/3.x0A (ANSI) + Registry Editor 1.x.x, x86: итог любой из операций - выполнено, сбоев нет; 5.7) MS VS 2008 сборка: попытка копирования по F5/F6/Drag&Drop - плагин Registry Browser 2.19a/3.x0A (ANSI)/v3.x0W (UNICODE) + Registry Editor 1.x.x, x86: итог любой из операций - выполнено, сбоев нет; Следовательно, из полученных результатов можно сделать следующие выводы: 1) Ошибка однозначно фиксируется; 2) Источник ошибки - плагин Registry Browser v3.x.xW (UNICODE), но раз ANSI версия данного плагина ошибки не вызывает, то наиболее вероятно, что ошибка находится в исходных текстах UNICODE варианта данного плагина; 3) Плагин Registry Editor такой ошибке не подвержен вне зависимости от того, каким компилятором собран сам Far.exe; 4) Одновременное присутствие в одной установке Far Manager двух UNICODE плагинов Registry Browser 3.ххW и Registry Editor не приводит к сбоям до тех пор, пока плагины используют разные префиксы вызова или при прямом вызове плагина. | Следовательно для операций импорта в Реестр нам надо использовать плагин Registry Editor, а желающим в GCC сборках Far 2.0 использовать для этого Registry Browser или применять ANSI версию 3.2.0А, или пинать автора плагина чтобы исправил проблемный код и не назначать нескольким плагинам один префикс (уже встречался с таким садо-мазохистом-любителем начитавшимся популярной макулатуры - в цирк ходить не надо) - это уже их решение каким путём идти, третьего нет. MS VS бинарные сборки Far.exe такому явлению не подвержены. Автору плагина Registry Browser стоит внимательно проверить код именно UNICODE версии на ошибки при портировании из ANSI в UNICODE - первопричина ошибки именно тут. P.S. Но, т.к. версия 3.х (v3.00 - 27 Jun 2009) появилась более чем через шесть лет после версии 2.19А (11 Oct 2003), то наверное этот баг автор исправит где-то к версии 4.0, году эдак в 2019 - 2020, хотя и пораньше хочется.
---------- Жив курилка! (Р. Ролан, "Кола Брюньон") Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti |
| Всего записей: 33204 | Зарегистр. 31-07-2002 | Отправлено: 19:06 20-11-2010 | Исправлено: Victor_VG, 19:09 20-11-2010 |
|