Заблокирован
Автор FAQ
1

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

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

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

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

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

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

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

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

14
Модератор
3377 / 2149 / 352
Регистрация: 13.01.2012
Сообщений: 8,351
15.04.2013, 08:53 2
а если шлепнуть объект (ActiveX) после просмотра файла (для каждого просмотра создавать заново)?
0
Заблокирован
Автор FAQ
15.04.2013, 14:29  [ТС] 3
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
Модератор
3377 / 2149 / 352
Регистрация: 13.01.2012
Сообщений: 8,351
15.04.2013, 14:46 4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
приводит к облому
в смысле?
0
Заблокирован
Автор FAQ
15.04.2013, 15:44  [ТС] 5
Цитата Сообщение от vxg Посмотреть сообщение
в смысле?
- см скрины.
Ещё раз проблемма после подгрузки PDF а в системе возникает AcroRead.exe (думаю запускается ActiveX - от адоба) с 4-мя поткоами, одновременно в приложение увеличивает число своих нитей также на 4-ри, я пробовал снимать AcroRead.exe, но при его удалении потоки приложения не пропадают а файл PDF так и сотаётся залоченным для чтения.
Нубские решения - открыть в браузере пустую страницу не помогают. Думаю дело именно в контроле CWebBrowser2 который не поддерживает Quit и Release, ломаю голову как вытащить из CWebBrowser2 интерфейс IWebBrowser2
Миниатюры
СВебБраузер2 - плагин Акробата лочит файлы   СВебБраузер2 - плагин Акробата лочит файлы  
0
Модератор
3377 / 2149 / 352
Регистрация: 13.01.2012
Сообщений: 8,351
15.04.2013, 16:04 6
да грохнуть его (актив икс). для начала. по идее если это не поможет значит вообще швах - либо компонента некорректная (ибо деструктор все должен подтереть), либо адоб виноват либо все вместе
0
Заблокирован
Автор FAQ
15.04.2013, 17:15  [ТС] 7
Цитата Сообщение от vxg Посмотреть сообщение
да грохнуть его (актив икс). для начала.
- ну вот как можно грохнуть компонет(в данном случае CWebBrowser), который как эдит бокс привязан к окну? (у меня не HTMLView не IWebBrowser а именно компонент)
Либо что ты имеешь ввиду? Нельзя его грохнуть - надо высвободить контекнт. Пока грешу на адоб, т.к другие плагины нормально возвращают контент.

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

Не по теме:

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

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

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

Добавлено через 41 секунду
уж лучше грохать потоки по имени акробата. хотя и в этом случае можно убить какой-нибудь левый файл открытый пользователем параллельно
0
Заблокирован
Автор FAQ
28.04.2013, 19:24  [ТС] 13
Решение немного напомниает костыль, зато простое
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
Модератор
3377 / 2149 / 352
Регистрация: 13.01.2012
Сообщений: 8,351
29.04.2013, 11:03 14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
костыль
главное работает, но выглядит если честно как чистое шаманство... вариант с созданием нового объекта для каждого использования и его удаление после использования смотрелся бы логичнее, но если технически не судьба, то так оно видно и должно быть
0
Заблокирован
Автор FAQ
29.04.2013, 11:29  [ТС] 15
Цитата Сообщение от vxg Посмотреть сообщение
но если технически не судьба, то так оно видно и должно быть
- в том концепте проекта который использовал, пересоздавание было неприемлимо - было очень заметно момент когда главный элемент окна пересоздавался. Пришлось искать пути костылей.
По идеи должна была работать связка
C++
1
2
3
m_Browser.Stop();//останов всех связанных потоков
m_Browser.Navigate(...);//переход по нужному пути к файлу
m_Browser.Refresh(...); //даже без рифреша должно было работать
но у мелкософтовского активикса "было своё видение корректной работы"
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2013, 11:29
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru