|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.07.2013, 07:10 | #1 |
Новичок
Джуниор
Регистрация: 05.07.2013
Сообщений: 3
|
ActiveX и терминальные сервера
Был написан ActiveX давно. Смысл его - закачка с сервера нужных файлов в нужные каталоги, нужные действия с некоторыми из файлов, архивирование и т.д. по мелочи. В общем очень нужная вещь для работы. )) Все работало и работает на персоналках обычных. Запрашивают страничку, делают там манипуляции и нажимают на кнопку, которая запускает ActiveX в новом окне IE.
Теперь пришли терминальные сервера с тонкими клиентами. Выявилась проблема. Первый раз запрашивают страничку, все нормально. При последующих запросах, вываливается ошибка "Runtime Error 216 at XXX". Может из-за многопоточности в терминальных серверах? Типа IE на сервере запускается 1 раз, а потом отдает каждой сессии этот уже загруженный в IE ActiveX (даже если ActiveX в другом окне IE запускается), и они пересекаются с другими из других сессий? Есть ли какие-то правила написания ActiveX под IE для терминальных серверов? |
05.07.2013, 08:08 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
В обычном случае, ActiveX всегда загружается с сервера на локальный диск и исполняется на стороне клиента-машины. При этом, если этот COM-объект создает и использует некий файл настроек, а судя по всему в вашем случае так и происходит, то этот файл создается на локальной машине, соответственно на другой машине он создается тоже свой уникальный на своем локальном диске.
В случае тонких клиентов, "локальный диск" (дисковое пространство в терминальной сессии) всегда остается на стороне сервера и этот "файл настроек" создается, соответственно, на удаленном "локальном диске" в одном и том же месте (пути), несмотря на то, что для клиентов создается свой индивидуальный поток COM-объекта в памяти терминальной сессии при работе в IE. p.s.: подобную проблему с одним файлом настроек пришлось решать на локальной машине в случае запуска нескольких экземпляров COM-объекта на экранах мнемосхем в TraceMode, путем передачи номера экрана для создания и использования индивидуального файла настроек (в имени).
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
05.07.2013, 08:15 | #3 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
05.07.2013, 08:42 | #4 |
Новичок
Джуниор
Регистрация: 05.07.2013
Сообщений: 3
|
SoftLine не знаю что такое.
Про написанные уже ActiveX, которые делают закачку знаю, но у нас первоначально были и еще специфические действия у данного компонента, которые на данный момент уже отпали, но компонент остался, т.к. выполняет свою роль и искать что-то новое смысла нет. Давайте объясню тогда, что он делает конкретно. Его роль на данный момент - это загрузка другого exe-файла и библиотек для его работы в нужное место. Т.е. он создает структуру каталогов (если нужно) под другую программу, лог своей работы тоже пишет туда же (но в другой подкаталог) и загружает с сервера необходимые модули и программы, затем запускает нужные файлы. Но есть одна особенность. Следущая программа может модифицироваться, но имя у нее одно и тоже! По сути на одном компе должны работать сколь угодно много версий одной и той же программы (библиотеки почти не меняются для нее). Обратились к одному филиалу по сети, у них там старая версия - она загрузилась (1 раз) и работайте со старой версией. Подключились к другой, там другая, она 1 раз прогрузилась и работайте опять с другой версией exe-файла. В итоге, подключились опять к старой версии, ничего уже не грузится (она уже загрузилась), запускается старая версия. Для этого проверяются хэш-суммы у exe-шника, если такого нет, то он загружается и к имени приплюсовывается данная сумма (в укороченном варианте CRC-32). В итоге имеем на компе много exe-файлов разных версий программ (какую вызвали, та и работает). ActiveX только создает каталоги (в "Мои документы" и в "Application Data" у пользователя), закачивает в них файлы по http, ведет свой лог (имя лога каждый раз новое), переименовывает как нужно закаченные файлы, в реестре сохраняет кое-какую информацию. По сути все. Ну вот как-то так. )) Всё работало, пока дело не затронуло тонких клиентов. С ними появляется ошибка 216. Вроде дело внутри программы - обращение к памяти вне массива, конечно глянем код. Но ведь работало до тонких клиентов. А тут видимо как-то по особенному с памятью идет работа, общая память что ли? |
05.07.2013, 09:47 | #5 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
MSDN: Цитата:
Уважаемые программисты!: Не делайте пожалуйста так! Не используйте систему IE для инсталляций или управлений системой. Это приводит к разного рода ЧП, которые по большему счету ввиду ущербности Виндоуса не решаются. Я прошу не как программист, а как пользователь, терпящий бедство от такого рода программ, из-за которых приходится выдумывать отдушины типа XPMode или дополнительные терминальные серверы.
I'm learning to live...
|
|||
05.07.2013, 12:37 | #6 |
Новичок
Джуниор
Регистрация: 05.07.2013
Сообщений: 3
|
За совет про сервиспаки спасибо, посмотрим на IE.
В остальном не соглашусь, специфика у каждого предприятия своя. |
05.07.2013, 14:51 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ActiveX | Darcangel | Мультимедиа в Delphi | 1 | 14.07.2012 21:38 |
ActiveX | alexey_kip | Visual C++ | 1 | 19.04.2012 19:30 |
Вызов формы внутреннего (dll) ActiveX сервера | HelloEverybody | Компоненты Delphi | 2 | 29.01.2008 17:25 |