Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   вопрос для ГУРУ по работе в терминале (http://forum.oszone.net/showthread.php?t=84339)

babki 21-05-2007 13:15 589248

вопрос для ГУРУ по работе в терминале
 
У нас есть сервер Виндовс2000сервер. К нему в терминальном режиме (citrix) подключаются клиенты и работают с программой 1С: бухгалтерия.
Есть программа, установленная на сервере под учетной записью администратора. Ее смысл – получения данных с весов (до 10 весов можно подключить одновременно, значение с одних весов должны сниматься для 1клиента, вторых весов – для 2 клиента и тд.) через адаптер подключенный к одному сом порту сервера. Она запускается на сервере и с помощью OLE-технологии может передавать данные в другие программы в частности с 1С бухгалтерию. Вот ее описание:

"Controller.exe – программа связи с оборудованием.
Описание программы.
Программа Controller.exe создана для осуществления доступа к значению текущего веса снимаемого весовым терминалом с тензодатчиков, а так же для поддержки функционирования другого оборудования,например считывателя электронных карточек. Информация поступает в персональный компьютер по интерфейсам RS/232 или RS/485 согласно протоколу обмена.

Controller.exe является полным сервером OLE автоматизации (full server OLE Automation), поэтому может использоваться и как самостоятельное приложение для индикации текущего веса на экране дисплея компьютера, и как компонента сложного многокомпонентного приложения, предоставляя свои методы внешним программам.

В настоящее время большинство офисных и бухгалтерских систем поддерживают OLE-автоматизацию и имеют встроенный язык программирования на котором взаимодействие с внешними компонентами является простым и интуитивно понятным. Встроенный интерпретатор языка сам выполнит всю трудоемкую работу по взаимодействию приложения и внешних компонент, скрыв все детали от офисного программиста. Единственное требование – эти компоненты должны быть зарегистрированными в реестре Windows серверами OLE автоматизации. Этому требованию полностью удовлетворяет программа Controller.exe. Она поддерживает технологию OLE Automation и сама регистрируется в реестре при запуске в качестве обычного приложения Windows. Подчеркнем, т.к. это очень важно, что для использования программы совместно с другими приложениями, необходимо первый раз запустить ее самостоятельно для саморегистрации в реестре Windows. Это же необходимо делать всякий раз при изменении местоположения программы Controller.exe. Под запуском программы подразумевается старт и завершение работы приложения.

Программа экспортирует 4 метода.

Методы:
GetStatus(AdrTerm,ChannelN) - получить текущий статус;
GetWeight(AdrTerm,ChannelN) - получить значение веса;
SetNull(AdrTerm,ChannelN) - обнулить показания (установка нуля).
GetCount(AdrTerm,ChannelN,CountN) - получить показание счетчика.

Все методы, за исключением GetCount, имеют по 2 входных параметра – адрес терминала,№ канала. Входные параметры представляют собой целые числа : AdrTerm от 0 до 255(0 для 232 интерфейса), ChannelN - 1 или 2. ChannelN никак не связан с № СОМ-порта, иными словами 1 канал не обязательно может быть на СОМ1. Метод GetCount помимо аналогичных первых двух параметров имеет дополнительный третий входной параметр – номер счетчика, представляющий собой целое число.

В случае возникновения нестандартных ситуаций, методы могут возвращать следующие значения :

-5000 и -5001 - «Терминал не обнаружен» и «С терминалом нет связи» соответственно. Справедливо
для всех методов.
-5002 - «Команда не поддерживается» для метода GetCount , «Команда выполнена» для метода
SetNull, «Вес стабилен» для метода GetStatus.
-5003 - «Выход за границы диапазона» для метода GetCount, «Вес не стабилен» для метода
GetStatus.

Пример работы с программой в “1С:Предприятие”.

В “Глобальный модуль” поместить код создания объекта. Для этого в секции объявления глобальных переменных объявить соответствующую переменную.
Перем ТВ003 Экспорт;
А в процедуре ПриНачалеРаботыСистемы создать объект
ТВ003 = СоздатьОбъект(“OSScales.ScAuto”);
Создать новый документ или взять существующий, на форме разместить кнопку “Получить вес”, вызывать окно свойств для этой кнопки и на закладке “Дополнительно” в окне “Формула” указать функцию “Опрос()”, которая будет выполняться при нажатии кнопки. Осталось только щелкнув по закладке “Модуль” формы определить функцию Опрос ().
Процедура Опрос()
Var Res
Res = ТВ003.GetStatus(1,1);
Сообщить(“Текущий статус ”+Строка(Res));
Res = ТВ003.GetWeight(1,1);
Сообщить(“Текущий вес ”+Строка(Res));
Res = ТВ003.GetCount(1,1,5);
Сообщить(“Значение счетчика ”+Строка(Res));
Res = ТВ003.SetNull(1,1);
Сообщить(“Состояние обнуления ”+Строка(Res));
КонецПроцедуры."



На самом сервере, под учетной записью администратора значение веса корректно снимаются с любых весов как с помощью самой программы, так и с помощью вызываемых методов через 1С. См. пример выше.
Проблема в том что клиенты (с правами пользователей), работающие в терминале не могут получить значение веса с нужных весов- выдается значение 0. В чем может быть проблема? Технология ОLE может корректно работать в терминальном режиме? Кто основательно знает эту технологию- расскажите в чем может быть загвоздка?
Может ли теоретически клиент в терминале с правами пользователя работать с программой, запущенной другим пользователем – администратором на сервере через технологию OLE?
Может нужно запустить данную программу в качестве службы(программа представляет из себя файл controller.exe c аппаратной защитой ключом hasp-usb)- как это сделать? И с какими правами лучше это сделать (NT Authority , system,администратор)?
В реестре объект OLE программы зарегистрировался так с разрешениями для пользователей «только чтение»

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}]
@="ScAuto Object"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\LocalServer32]
@="c:\\Controller\\Controller.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\ProgID]
@="Controller.ScAuto"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\TypeLib]
@="{D6AEB295-05A2-4D41-A82F-21CB4BE5958F}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\Version]
@="1.0"

У кого какие есть мысли по этому поводу, выскажите их…

Angry Demon 21-05-2007 16:53 589347

babki
Я бы поставил монитор обращения к реестру и промониторил бы, куда лезет этот самый Controller.exe, что пишет в реестр. Исходя из этого, дал бы юзерам права на соответствующую ветку реестра. Кроме того, возможно, прога пишет что-то в свою папку в Program files, поэтому можно попробовать юзерам дать разрешения на запись туда.

babki 21-05-2007 20:52 589432

Цитата:

Я бы поставил монитор обращения к реестру и промониторил бы, куда лезет этот самый Controller.exe, что пишет в реестр.
вот я ее и промониторил и при каждом запуске она регистрируется в реестре и пишет вот это:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}]
@="ScAuto Object"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\LocalServer32]
@="c:\\Controller\\Controller.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\ProgID]
@="Controller.ScAuto"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\TypeLib]
@="{D6AEB295-05A2-4D41-A82F-21CB4BE5958F}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{249E3377-BEB3-4681-A746-D39EFDFF4E0F}\Version]
@="1.0"

но дело то в том что эта прога один раз должна запускаться на сервере (в виде некого сервера обработки запросов от пользователей), а к ней в процессе работы через OLE технологию подключаться клиенты, а они ничего в реестр уже писать не могут... аналогично и в папку Program files.
Меня смущает что органиует OLE доступ файл с расширение .exe. У большинства OLE объектов он идет ввиде *.dll библиотек...

Angry Demon 22-05-2007 11:09 589576

babki
Т.е., юзеры запускают EXE-файл?

Цитата:

Может нужно запустить данную программу в качестве службы(программа представляет из себя файл controller.exe c аппаратной защитой ключом hasp-usb)- как это сделать?
Может. Нужно пробовать. Например, с помощью instsrv.exe и srvany.exe. Пример использования этих прог приведён тут. а что говорит саппорт программы?

babki 22-05-2007 12:09 589604

Цитата:

а что говорит саппорт программы?
в том то и дело что ничего вразумительного. типа программа будет работать у того пользователя , под которого она установлена (она в таком режиме и работает), а насчет терминалов - пишет типа мы не в курсе....

Цитата:

babki
Т.е., юзеры запускают EXE-файл?
юзеры в терминалах как раз не должны запускать этот файл. Они должны обращаться через технологию OLE к уже запущенному процессу controller.exe под пользователем Админисратора. Так как данная программа блокирует сом1 порт и второй экземпляр программы уже не будет в принципе работать... Дак вот при обращении ползователя из терминала через OLE объект к запущенному процессу от имени администратора, выдаются значения весов ,равные 0.

Imv 02-12-2009 15:32 1285097

Если решили проблему напишите , плиз, кам ?!!


Время: 02:58.

Время: 02:58.
© OSzone.net 2001-