Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24

СВебБраузер2 - плагин Акробата лочит файлы

14.04.2013, 21:15. Показов 2147. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Юзаю CWebBrowser2 ActiveX всё гуд, но есть одна проблемма, после просмотра PDF документов доступ к ним оказывается залоченным даже после смены контента CWebBrowser2. Полагаю при смене контента CWebBrowser2 на выгружает плагин акробата и в результате остаётся поток связанный с файлом, данный поток всё и коробит. Пока обхожусь тем, что просматриваемые PDF ложу копиями во %TEMP% каталог с UNIQUE NAME (в результате оригинальные файлы плагин акробата не лочит), но это не дело - т.к при большом обїёме PDF-а прошедшего через браузер папка %TEMP% раздувается в разы.

Пробовал CWebBrowser2::Stop, CWebBrowser2::Quit - не помогает - файлы остаются залоченными.
Кто сталкивался помогите решить проблемму!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2013, 21:15
Ответы с готовыми решениями:

Как изменятся время и дальность полета акробата
Акробат прыгает под некоторым углом к горизонту, держа в руках мяч. В высшей точке траектории он бросает мяч вертикально вниз. Как...

Вирус лочит файрвол, как быть?
Добрый день. Я недавно заметил что у меня "что-то" кушает трафик... Поставил аваст 5, обновил его, но он ничего не нашёл. Тогда я...

Вызов диалога с ожиданием реакции - мьютекс лочит UI поток
Необходимо решить классическую задачу - вызвать диалог, дождаться действия пользователя и на их основе сделать что-то. Естественно нужно...

14
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
15.04.2013, 08:53
а если шлепнуть объект (ActiveX) после просмотра файла (для каждого просмотра создавать заново)?
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.04.2013, 14:29  [ТС]
vxg, CWebBrowser2 идёт у меня контролом окна (т.е я не создавал его динамически), хотя мысли были. Впрочем я юзал CWebBrowser2::Quit (что в принципе равносильно убийству браузера) в try{}catch() блоке - не помогает. В данный момент пробую подъюзнуть GetDocument квернуть интерфес и чего нибудь релизнуть в полученном, если не поможет буду динамически созадвать (через new CWebBrowser2()) объект и потом шлёпать.

Добавлено через 4 часа 22 минуты
C++
1
2
3
IHTMLDocument2 * pDoc = (IHTMLDocument2 *)m_Browser.GetDocument();
if( pDoc )
    pDoc->close();
приводит к облому, что то прихожу в ступор
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
15.04.2013, 14:46
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
приводит к облому
в смысле?
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.04.2013, 15:44  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
в смысле?
- см скрины.
Ещё раз проблемма после подгрузки PDF а в системе возникает AcroRead.exe (думаю запускается ActiveX - от адоба) с 4-мя поткоами, одновременно в приложение увеличивает число своих нитей также на 4-ри, я пробовал снимать AcroRead.exe, но при его удалении потоки приложения не пропадают а файл PDF так и сотаётся залоченным для чтения.
Нубские решения - открыть в браузере пустую страницу не помогают. Думаю дело именно в контроле CWebBrowser2 который не поддерживает Quit и Release, ломаю голову как вытащить из CWebBrowser2 интерфейс IWebBrowser2
Миниатюры
СВебБраузер2 - плагин Акробата лочит файлы   СВебБраузер2 - плагин Акробата лочит файлы  
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
15.04.2013, 16:04
да грохнуть его (актив икс). для начала. по идее если это не поможет значит вообще швах - либо компонента некорректная (ибо деструктор все должен подтереть), либо адоб виноват либо все вместе
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.04.2013, 17:15  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
да грохнуть его (актив икс). для начала.
- ну вот как можно грохнуть компонет(в данном случае CWebBrowser), который как эдит бокс привязан к окну? (у меня не HTMLView не IWebBrowser а именно компонент)
Либо что ты имеешь ввиду? Нельзя его грохнуть - надо высвободить контекнт. Пока грешу на адоб, т.к другие плагины нормально возвращают контент.

Добавлено через 4 минуты

Не по теме:

Плагин качал с адоба блокировка идёт на ХРюшке и 7-ке стало быть прихожу к выводу, что в адобе недопаяли или специально так сделаи чтобы их Актив юзали, а не подгружали через другие контролы

0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
16.04.2013, 09:20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну вот как можно грохнуть компонет
добавляй не в дизайнере, а во время выполнения через new. в качестве владельца (или как там оно в VS) указывай себя (0 наверное) что бы можно было самому вызвать delete.
1
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.04.2013, 10:25  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
добавляй не в дизайнере, а во время выполнения через new. в качестве владельца (или как там оно в VS) указывай себя (0 наверное) что бы можно было самому вызвать delete.
- я понял это, но смотри если в доп окне можно такое сотворить ( даже не надо сам элемент создавать а создавать целое немодальное окно), то как быть с основным диалогом : по любому открытию PDF destoy-ить и создавать?Такой финт наверное будет заметен, хотя да по идеи должно помочь такое, но уж как-то сильно грубо, хотелось какой-то изящный диспатч если надо квер, потом релиз и всё снялось
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
16.04.2013, 14:00
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
по любому открытию PDF destoy-ить и создавать
ну да. что то вроде
актив_икс = new актив_икс;
вызов диалога
бла бла бла
delete актив_икс;
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
будет заметен
в каком смысле? пользователь не увидит динамического создания компонента. он же не визуальный? я со студией не сижу могу ошибаться. даже если визуальный - создать его невидимым. или на невидимом окне. как то так.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
как-то сильно грубо
ну а что же делать если такие рога торчат из акробата. не так уж и грубо на мой вкус. можно даже для себя обосновать минимизацией загруженных компонентов
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и всё снялос
вот тут самая лирика. может и не сняться. может не в этом дело и деструктор не поможет. может адобовские потроха по какой-то другой причине заморозились.
1
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.04.2013, 14:15  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
в каком смысле? пользователь не увидит динамического создания компонента. он же не визуальный? я со студией не сижу могу ошибаться.
- пользователь увидит что контент контрола перед открытием иного файла как минимум мигнёт (как раз delete а потом new - безследно такие вещи не проходят), хотя видимо надо попоробовать так как 2-й день стою на месте

Цитата Сообщение от vxg Посмотреть сообщение
вот тут самая лирика. может и не сняться. может не в этом дело и деструктор не поможет. может адобовские потроха по какой-то другой причине заморозились.
- я вот думаю костыль сварганить по снятию потоков, снап на потоки до акробата, снап после, всё что появилось - сжечь.
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
16.04.2013, 15:26
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
всё что появилось - сжечь
ууу... как бы "дом" не поджечь

Добавлено через 41 секунду
уж лучше грохать потоки по имени акробата. хотя и в этом случае можно убить какой-нибудь левый файл открытый пользователем параллельно
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.04.2013, 19:24  [ТС]
Решение немного напомниает костыль, зато простое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//Собственный метод для перехода по ссылке с обновлением
    friend void NavigateAndRefresh(CWebBrowser2 *pBrowser, LPCTSTR szURL)
    {
        if(pBrowser && szURL)
        {
            try
            {
                pBrowser->Refresh();
            }
            catch(CException * e)
            {
                e->Delete();
            }
            pBrowser->Navigate(szURL, NULL, NULL, NULL, NULL);
            pBrowser->Stop();
            pBrowser->Navigate(szURL, NULL, NULL, NULL, NULL);
            try
            {
                pBrowser->Refresh();
            }
            catch(CException * e)
            {
                e->Delete();
            }
        }
    }
уточнение в браузере выставить Offline либо в пропертисах либо програмно при помощи SetOffline.
1 - й Navigate - встряхивает кеш
Stop делает детач связанных с кешированным файлом потоков (вроди как отработка об этом свидетельствует)
2 - й Navigate - ну вот не хочет CWebBrowser без него отображать новый контент, думаю так 1-й навигэйт сбросил кеш, а второй подгрузил в него новый файл
Refresh вконце обязательно (метод иногда генит эксептшн, потому буз try{}catch{} юзать не рекомендую!)
Refresh вначале странен, но без него бывают непонятки с новым с контентом, короче для симметрии пусть будет пока что.
1
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
29.04.2013, 11:03
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
костыль
главное работает, но выглядит если честно как чистое шаманство... вариант с созданием нового объекта для каждого использования и его удаление после использования смотрелся бы логичнее, но если технически не судьба, то так оно видно и должно быть
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
29.04.2013, 11:29  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
но если технически не судьба, то так оно видно и должно быть
- в том концепте проекта который использовал, пересоздавание было неприемлимо - было очень заметно момент когда главный элемент окна пересоздавался. Пришлось искать пути костылей.
По идеи должна была работать связка
C++
1
2
3
m_Browser.Stop();//останов всех связанных потоков
m_Browser.Navigate(...);//переход по нужному пути к файлу
m_Browser.Refresh(...); //даже без рифреша должно было работать
но у мелкософтовского активикса "было своё видение корректной работы"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2013, 11:29
Помогаю со студенческими работами здесь

Как правильно завершить поток, который лочит мьютекс в цикле?
Есть поток, созданный посредствам CreateThread, который в цикле лочит именной мьютекс, ну типа while(1) { OpenMutex(MUTEX_ALL_ACCESS,...

Как открыть файлы через Java плагин для серверов майнкрафт
Видел несколько серверов где есть команда /rms ,она(команда) скачивает и открывает всякие файлы на компе через конфиг, я хочу понять как...

Скачать плагин для Adobe Photoshop CS4 Extended, чтобы сохряняло файлы в ico
Помогите найти и скачать плагин для Adobe Photoshop CS4 Extended, чтобы сохряняло файлы в ico. Перелазил торентов очень много, не...

Найти все RTF файлы, захешировать эти файлы MD5 и SHA1. Потов захешированые файлы поместить в документ
Найти все RTF файлы, захешировать эти файлы MD5 и SHA1. Потов захешированые файлы поместить в фаил(txt или в любой другой)в котором должны...

Пропали файлы на флешке.Вместо них файлы и папки со странными именами
Вставил флешку с программами(пользовался ей недавно) и тут такое.... Ни одну папку открыть не могу. Как вернуть нормальные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
Настройка MTProxy
Loafer 11.06.2025
Дополнительная информация к инструкции по настройке MTProxy: Перед сборкой проекта необходимо добавить флаг -fcommon в конец переменной CFLAGS в Makefile. Через crontab -e добавить задачу: 0 3. . .
Изучаем Docker: что это, как использовать и как это работает
Mr. Docker 10.06.2025
Суть Docker проста - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер, если говорить образно, это запечатанная коробка, в которой находится ваше приложение вместе. . .
Тип Record в C#
stackOverflow 10.06.2025
Многие годы я разрабатывал приложения на C#, используя классы для всего подряд - и мне это казалось естественным. Но со временем, особенно в крупных проектах, я стал замечать, что простые классы. . .
Разработка плагина для Minecraft
Javaican 09.06.2025
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru