Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2013, 07:10   #1
GuV2001
Новичок
Джуниор
 
Регистрация: 05.07.2013
Сообщений: 3
По умолчанию ActiveX и терминальные сервера

Был написан ActiveX давно. Смысл его - закачка с сервера нужных файлов в нужные каталоги, нужные действия с некоторыми из файлов, архивирование и т.д. по мелочи. В общем очень нужная вещь для работы. )) Все работало и работает на персоналках обычных. Запрашивают страничку, делают там манипуляции и нажимают на кнопку, которая запускает ActiveX в новом окне IE.
Теперь пришли терминальные сервера с тонкими клиентами. Выявилась проблема. Первый раз запрашивают страничку, все нормально. При последующих запросах, вываливается ошибка "Runtime Error 216 at XXX".
Может из-за многопоточности в терминальных серверах? Типа IE на сервере запускается 1 раз, а потом отдает каждой сессии этот уже загруженный в IE ActiveX (даже если ActiveX в другом окне IE запускается), и они пересекаются с другими из других сессий?
Есть ли какие-то правила написания ActiveX под IE для терминальных серверов?
GuV2001 вне форума Ответить с цитированием
Старый 05.07.2013, 08:08   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

В обычном случае, ActiveX всегда загружается с сервера на локальный диск и исполняется на стороне клиента-машины. При этом, если этот COM-объект создает и использует некий файл настроек, а судя по всему в вашем случае так и происходит, то этот файл создается на локальной машине, соответственно на другой машине он создается тоже свой уникальный на своем локальном диске.

В случае тонких клиентов, "локальный диск" (дисковое пространство в терминальной сессии) всегда остается на стороне сервера и этот "файл настроек" создается, соответственно, на удаленном "локальном диске" в одном и том же месте (пути), несмотря на то, что для клиентов создается свой индивидуальный поток COM-объекта в памяти терминальной сессии при работе в IE.

p.s.: подобную проблему с одним файлом настроек пришлось решать на локальной машине в случае запуска нескольких экземпляров COM-объекта на экранах мнемосхем в TraceMode, путем передачи номера экрана для создания и использования индивидуального файла настроек (в имени).
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.07.2013, 08:15   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Запрашивают страничку, делают там манипуляции и нажимают на кнопку, которая запускает ActiveX в новом окне IE.
Э-э-э... ты не из SoftLine случайно?
Цитата:
закачка с сервера нужных файлов в нужные каталоги
Ребята вы там чего? Про инсталляторы никогда не слышали? Мы же в жестком шорохе от таких ваших Активиксов!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2013, 08:42   #4
GuV2001
Новичок
Джуниор
 
Регистрация: 05.07.2013
Сообщений: 3
По умолчанию

SoftLine не знаю что такое.
Про написанные уже ActiveX, которые делают закачку знаю, но у нас первоначально были и еще специфические действия у данного компонента, которые на данный момент уже отпали, но компонент остался, т.к. выполняет свою роль и искать что-то новое смысла нет.
Давайте объясню тогда, что он делает конкретно. Его роль на данный момент - это загрузка другого exe-файла и библиотек для его работы в нужное место. Т.е. он создает структуру каталогов (если нужно) под другую программу, лог своей работы тоже пишет туда же (но в другой подкаталог) и загружает с сервера необходимые модули и программы, затем запускает нужные файлы. Но есть одна особенность. Следущая программа может модифицироваться, но имя у нее одно и тоже! По сути на одном компе должны работать сколь угодно много версий одной и той же программы (библиотеки почти не меняются для нее). Обратились к одному филиалу по сети, у них там старая версия - она загрузилась (1 раз) и работайте со старой версией. Подключились к другой, там другая, она 1 раз прогрузилась и работайте опять с другой версией exe-файла. В итоге, подключились опять к старой версии, ничего уже не грузится (она уже загрузилась), запускается старая версия. Для этого проверяются хэш-суммы у exe-шника, если такого нет, то он загружается и к имени приплюсовывается данная сумма (в укороченном варианте CRC-32). В итоге имеем на компе много exe-файлов разных версий программ (какую вызвали, та и работает).
ActiveX только создает каталоги (в "Мои документы" и в "Application Data" у пользователя), закачивает в них файлы по http, ведет свой лог (имя лога каждый раз новое), переименовывает как нужно закаченные файлы, в реестре сохраняет кое-какую информацию. По сути все.
Ну вот как-то так. )) Всё работало, пока дело не затронуло тонких клиентов. С ними появляется ошибка 216. Вроде дело внутри программы - обращение к памяти вне массива, конечно глянем код. Но ведь работало до тонких клиентов. А тут видимо как-то по особенному с памятью идет работа, общая память что ли?
GuV2001 вне форума Ответить с цитированием
Старый 05.07.2013, 09:47   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но есть одна особенность.
Это не оправдывает такую инсталляцию. Скажу от себя, как пользователь который плачет крокодильими слезами, когда по IE приходится инсталлировать некую программу: Срочно меняй стратегию! СРОЧНО!!!! Иначе этокий способ приведет к беде. Терминалы это ерунда. У меня не только на них проблема, а еще и на х64 и на Win 7-8 при разнообразной конфигурации политик безопасности и доменных политик.
Цитата:
С ними появляется ошибка 216.
Эта ошибка если мне не изменяет память говорит о отклонении доступа в участок системы. Какой не помню точно. Ставь сервиспаки поновее. Особенно на IE. Ишачка обнови.
MSDN:
Цитата:
ERROR_EXE_MACHINE_TYPE_MISMATCH

216 (0xD8)

This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher.
Несовместимость тоже может проявляться.

Уважаемые программисты!: Не делайте пожалуйста так! Не используйте систему IE для инсталляций или управлений системой. Это приводит к разного рода ЧП, которые по большему счету ввиду ущербности Виндоуса не решаются.

Я прошу не как программист, а как пользователь, терпящий бедство от такого рода программ, из-за которых приходится выдумывать отдушины типа XPMode или дополнительные терминальные серверы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2013, 12:37   #6
GuV2001
Новичок
Джуниор
 
Регистрация: 05.07.2013
Сообщений: 3
По умолчанию

За совет про сервиспаки спасибо, посмотрим на IE.
В остальном не соглашусь, специфика у каждого предприятия своя.
GuV2001 вне форума Ответить с цитированием
Старый 05.07.2013, 14:51   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
специфика у каждого предприятия своя.
В рамках предприятия ради бога, но когда такого монстра выставляют на продажу людям, которые ни в зуб ногой страдают другие.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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