|
Как отличить терминального пользователя от физического,кодом? | ☑ | ||
---|---|---|---|---|
0
bambucho
19.10.17
✎
11:05
|
Как кодом отличить терминального пользователя от физического (локально запустившего конфу)?
Что нужно запросить у ОС,например через API или м.б. другими простыми способами. |
|||
1
Мимохожий Однако
19.10.17
✎
11:07
|
Я>^
|
|||
2
Доминошник
19.10.17
✎
11:09
|
&НаКлиенте
Процедура КакПолучитьИмяКомпьютера() Сообщить(ИмяКомпьютера()); КонецПроцедуры |
|||
3
bambucho
19.10.17
✎
11:10
|
(2) Имя у терминального пользователя такое же,как и у физического.Проверенно в серверной RemoteAPP и на патченных ОС.
|
|||
4
Гипервизор
19.10.17
✎
11:11
|
(0)(2) А если зайти локально на сервере?
|
|||
5
bambucho
19.10.17
✎
11:11
|
(3) то же самое,возвращает одинаковое имя компьютера
|
|||
6
Филиал-msk
19.10.17
✎
11:13
|
(0) Посмотреть в переменные среды
|
|||
7
kauksi
19.10.17
✎
11:13
|
Функция ПолучитьИмяКомпьютераТО() Экспорт
//((заменим на имя физического компа //типовой код комментируем. //Если мИмяКомпьютера = Неопределено Тогда // мИмяКомпьютера = ВРег(ИмяКомпьютера()); //КонецЕсли; Если мИмяКомпьютера = Неопределено Тогда WSS = Новый COMОбъект("WScript.Shell"); WSSE = WSS.Environment("Process"); мИмяКомпьютера = ВРег(WSSE.Item("ClientName")); Если ПустаяСтрока(мИмяКомпьютера) Тогда мИмяКомпьютера = ВРег(ИмяКомпьютера()); КонецЕсли; КонецЕсли; //если зайти в терминальной сессии консольно, то получим "CONSOLE", // в этом случае применяем типовую функцию Если мИмяКомпьютера = "CONSOLE" Тогда мИмяКомпьютера = ВРег(ИмяКомпьютера()); КонецЕсли; //)) Возврат мИмяКомпьютера; КонецФункции // ПолучитьИмяКомпьютераТО() |
|||
8
kauksi
19.10.17
✎
11:15
|
Функция ПолучитьИмяКомпьютераТО()
Если мИмяКомпьютера = Неопределено Тогда мИмяКомпьютера = ВРег(ИмяКомпьютера()); WshShell = Новый COMОбъект("WScript.Shell"); ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%"); ИмяСессии = WshShell.expandEnvironmentStrings("%SESSIONNAME%"); Если ИмяСессии="Console" Тогда //Имя Компьютера будет равно имени терминального сервера Иначе //Терминальный клиент мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента; КонецЕсли; КонецЕсли; Возврат мИмяКомпьютера; КонецФункции |
|||
9
Fish
19.10.17
✎
11:16
|
(5) Это как? А у меня разные показывает - если пользователь запустил 1С локально - то имя локального компьютера, если терминально - то имя терминального сервера. ЧЯДНТ?
|
|||
10
bambucho
19.10.17
✎
11:16
|
ок,попробую пока эти примеры переварить)
|
|||
11
бомболюк
19.10.17
✎
11:17
|
через GetSystemMetrics как то делается
|
|||
12
bambucho
19.10.17
✎
11:25
|
(9) Еще раз перепроверил,у Server 2008r2:RemoteApp,например в списке пользователей указывает имя сервера,как у физически запустившего конфу (УТ10),так и терминалки.
|
|||
13
Fish
19.10.17
✎
11:40
|
(12) А, ты про RemoteApp. А я про запуск клиента 1С на локальном компе. О разном говорили :)
|
|||
14
bambucho
19.10.17
✎
12:49
|
(13) Да,я про терминалки,толстые/тонкие клиенты запущенные на других машинах,идентифицируются (имена ПК) платформой нормально.
|
|||
15
bambucho
19.10.17
✎
12:50
|
секас в том,что бы обработку работы со сканером,заставить не реагировать на терминальных пользователей (что бы не отключать пистолет на время работы с базой,иначе ошибка "...Занять")
|
|||
16
kauksi
19.10.17
✎
13:02
|
ну так код выше... кто терминально зашел у них будет ИмяИхкомпа_ИмяПользователя, а кто локально на сервере сидит Console_ИмяПользователя. В форме списка ТорговоеОборудование сними галку ТолькоПросмотр, и делай как тебе надо
|
|||
17
1c_progr
19.10.17
✎
13:26
|
мИмяКомпьютера = ВРег(ИмяКомпьютера());
Попытка WshShell = Новый COMОбъект("WScript.Shell"); ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%"); Исключение ИмяКомпьютераКлиента = ""; КонецПопытки; ИмяКомпьютераКлиента = ВРЕГ(СокрЛП(ИмяКомпьютераКлиента)); Если НЕ ИмяКомпьютераКлиента = "%CLIENTNAME%" И НЕ ИмяКомпьютераКлиента = "CONSOLE" И ЗначениеЗаполнено(ИмяКомпьютераКлиента) Тогда мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента; КонецЕсли; |
|||
18
bambucho
19.10.17
✎
13:27
|
(16) в Ут10 нет такой галки,только вкл/выкл
|
|||
19
patapum
19.10.17
✎
13:32
|
(15) Сделать в ярлыках параметры запуска, в сеансе читать, нет? Идея навскидку, сам не пробовал.
|
|||
20
bambucho
19.10.17
✎
13:35
|
(19) тоже вариант,но КМК встроенные механизмы платформы один х. потянут имя ПК,т.к. в алгоритмы ТО опираются на имя ПК...
попробую доработать ф.ПодключитьКлиента ...вчера нафантазировал около 8 решений |
|||
21
bambucho
19.10.17
✎
13:36
|
(20) в стеке вызовов она после открытия РТиУ
|
|||
22
bambucho
19.10.17
✎
17:23
|
(17) БОМБА! корректно определяет (конкотенирует) имя терм клиента с именем машины,на которой запущен 1с.
Попробую вставить определение имени в механизм регистрации настроек и работы с ТО. |
|||
23
uno-group
19.10.17
✎
17:47
|
А нефик на сервер локально народ пускать.
|
|||
24
bambucho
19.10.17
✎
18:12
|
ГОООООЛЛЛЛ!!!! (всякие свисты--фейрверки)!
На тестовой связке работает (вроде) работает как надо! |
|||
25
bambucho
19.10.17
✎
18:13
|
(23) так сервер является касса...кризис на...
приходится жестко дешманить |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |