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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   [решено] Как запретить запуск двух и более копий 1С8 в Терминальном сеансе пользователя! (http://forum.oszone.net/showthread.php?t=283392)

sigmatik 09-06-2014 14:44 2362042

Как запретить запуск двух и более копий 1С8 в Терминальном сеансе пользователя!
 
Есть вполне рабочий скрипт проверки наличия запущенной копии приложения, вот он

Код:

SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe

Взять отсюда

Возможно ли его (скрипт) модифицировать таким образом, чтобы он проверял наличие процесса только в рамках процессов, запущенных от имени текущего пользователя ( в данном случае терминального) ? Также принимаются другие варианты скриптов, имеющих нужный функционал. Спасибо

cameron 09-06-2014 14:59 2362047

Цитата:

Цитата sigmatik
Возможно ли его (скрипт) модифицировать таким образом, чтобы он проверял наличие процесса только в рамках процессов, запущенных от имени текущего пользователя ( в данном случае терминального) ? »

запускать в контексте пользователя. ваш КО.

а вообще это проще решать средствами 1С - там есть инструмент, которым можно ограничить пользователя одним входом в базу, а не приложением 1cv8.exe

sigmatik 09-06-2014 15:09 2362053

Цитата:

Цитата cameron
запускать в контексте пользователя. ваш КО. »

Код в студию!
Цитата:

Цитата cameron
а вообще это проще решать средствами 1С - там есть инструмент, которым можно ограничить пользователя одним входом в базу, а не приложением 1cv8.exe »

Не подходит. Пользователь может одновременно запустить несколько клиентов 1С и выполнить вход в базу только в одном из них. Необходимо запретить именно запуск 1cv8.exe , потому как лицензия на терминальном сервере ограничивает не количество одновременных подключений к базе, а количество одновременно запущенных клиентов. Вот

cameron 09-06-2014 15:16 2362058

Цитата:

Цитата sigmatik
Пользователь может одновременно запустить несколько клиентов 1С и выполнить вход в базу только в одном из них. Необходимо запретить именно запуск 1cv8.exe , потому как лицензия на терминальном сервере ограничивает не количество одновременных подключений к базе, а количество одновременно запущенных клиентов. »

если речь про лицензии 1С, то вы не правы.
запущенных приложений до нажатия "1С: предприятие" или "конфигуратор" при выбраной базе может быть сколько угодно.
для проверки этого возьмите изолированную виртуальную машину, установите туда 1С и запустите 100 копий приложения без активации лицензии или подключения ключа.

Цитата:

Цитата sigmatik
Код в студию! »

Цитата:

Цитата sigmatik
SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe »


sigmatik 09-06-2014 15:26 2362063

Цитата:

Цитата cameron
если речь про лицензии 1С, то вы не правы.
запущенных приложений до нажатия "1С: придприятие" или "конфигуратор" при выбраной базе может быть сколько угодно.
для проверки этого возьмите изолированную виртуальную машину, установите туда 1С и запустите 100 копий приложения без активации лицензии или входа в базу. »

Проверяли уже тысячу раз) Некоторые пользователи очень любят нажимать на левую кнопку мыши по 6-8 раз вместо 2х , как результат - 4,5 а то и 6 запущенных копий 1С , авторизация в которых не выполнена за исключением последней копии, как результат другой пользователь в другом терминальном сеансе пытается запустить 1С и получает сообщение о том, что свободных лицензий не осталось. Возвращаемся к первому пользователю, закрываем все открытые копии 1С кроме последней, опять возвращаемся ко второму пользователю, повторно запускаем 1С - PROFIT !

Так что там с запуском в контексте текущего пользователя? зачем вы мне кидаете мой код, я его уже видел :)

cameron 09-06-2014 15:39 2362071

Цитата:

Цитата sigmatik
Проверяли уже тысячу раз) Некоторые пользователи очень любят нажимать на левую кнопку мыши по 6-8 раз вместо 2х , как результат - 4,5 а то и 6 запущенных копий 1С , авторизация в которых не выполнена за исключением последней копии, как результат другой пользователь в другом терминальном сеансе пытается запустить 1С и получает сообщение о том, что свободных лицензий не осталось. »

ясно. у нас сквозной вход в базы, поэтому такой проблемы нет.
но я права - у вас уже есть подключение к базе ;), но висит на аутификации. я вам говорила про другое.

Цитата:

Цитата sigmatik
Так что там с запуском в контексте текущего пользователя? зачем вы мне кидаете мой код, я его уже видел »

запускайте его в контекте пользвоателя, что вам не ясно?

альтернативно рассмотрите вариант RemoteApp.

ShaddyR 09-06-2014 15:43 2362073

Цитата:

Цитата sigmatik
зачем вы мне кидаете мой код, я его уже видел »

затем, чтоб ты прочитал параметры данной команды и модифицировал ее соотв. образом. Если ты такого простого действия не осилишь - тренируйся писать заявление "по-собственному" - готовыми скриптами в жизни отделаться не выйдет.

sigmatik 09-06-2014 15:56 2362082

Цитата:

Цитата ShaddyR
ты такого простого действия не осилишь »

Во-первых, я не припомню когда мы перешли на "Ты" Оо
Цитата:

Цитата ShaddyR
параметры данной команды »

Во вторых, если ты об этом
Код:

  TASKLIST /U <домен>\<пользователь>
то довожу до твоего сведения, что этот параметр позволяет запускать команду в контексте указанного в нем пользователя. Если ты внимательнее прочитаешь условия задачи, то, может быть, увидишь, что команда должна выполняться в контексте текущего пользователя.
Опять не понял ? Нужен один универсальный скрипт, который будет работать у всех пользователей одинаково, без указания его ( пользователя ) имени.

Цитата:

Цитата cameron
запускайте его в контекте пользвоателя, что вам не ясно? »

См комментарий выше
Цитата:

Цитата cameron
альтернативно рассмотрите вариант RemoteApp. »

Спасибо, но тоже не подходит, так как большинство пользователей сидят за тонкими клиентами, а не за обычными десктопами.

cameron 09-06-2014 16:07 2362091

Цитата:

Цитата sigmatik
См комментарий выше »

мне этот комментарий ничего не говорит, потому что в вашем скрипте нигде нет tasklist /U,а теперь вы его зачем-то приплетаете.
причём он тут - не ясно.
зачем - не ясно.
Цитата:

Цитата sigmatik
Спасибо, но тоже не подходит, так как большинство пользователей сидят за тонкими клиентами, а не за обычными десктопами. »

нет тут смайлика facepalm, ну да ладно.
хинт1:
при входе на ТС можно запускать программу.
хинт2:
1С можно запускать с параметрами подключения к базе.

sigmatik 09-06-2014 16:15 2362095

Цитата:

Цитата cameron
мне этот комментарий ничего не говорит, потому что в вашем скрипте нигде нет tasklist /U,а теперь вы его зачем-то приплетаете. »

Ок , что вы имели ввиду, когда писали
Цитата:

Цитата cameron
запускайте его в контекте пользвоателя »

?
Разве не tasklist /U ?

Цитата:

Цитата cameron
при входе на ТС можно запускать программу. »

Спасибо , я в курсе :) . Хинт не решает проблему , описанную в условиях задачи
Цитата:

Цитата cameron
1С можно запускать с параметрами подключения к базе. »

И об этом я тоже в курсе, сейчас так и настроено, на рабочем столе пользователей ярлык с примерно такой ссылкой
Код:

"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /RunModeOrdinaryApplication /S "сервер\имя_базы"

cameron 09-06-2014 16:18 2362096

Цитата:

Цитата sigmatik
Ок , что вы имели ввиду, когда писали »

Цитата:

Цитата sigmatik
Разве не tasklist /U ? »

неа.
я говорю про запуск батника в сессии пользователя.

не нужно изобретать дополнительные велосипеды, у вас их уже достаточно.

sigmatik 09-06-2014 16:39 2362103

:o Он итак запускается в сессии пользователя! Где же еще ?
Хм... как бы так объяснить еще понятнее, даже не знаю ...
Взгляните на мой скрипт, его алгоритм прост:
1. Задаем переменную SEARCH , равную названию нужного нам процесса ( в скрипте это notepad.exe )
2. Выполняем команду tasklist , которая возвращает нам список всех активных процессов всех пользователей
3. Ищем в результатах выполнения команды процесс с именем SEARCH
4. Если такой процесс находим - завершаем работу скрипта
5. Если такой процесс не находим - запускаем блокнот start notepad.exe

Так вот , повторюсь, команда tasklist возвращает список всех процессов сервера!. А нужно сделать так, чтобы она возвращала процессы только того пользователя, от имени которого запущен bat'ник , иначе скрипт видит процессы других пользователей, и его работа завершается согласно пункту 4 нашего алгоритма.

cameron 09-06-2014 17:26 2362124

Цитата:

Цитата sigmatik
2. Выполняем команду tasklist , которая возвращает нам список всех активных процессов всех пользователей »

вы запускате под админом.
запустите под пользователем.

ShaddyR 09-06-2014 23:06 2362287

sigmatik, вот меньше бы умничал да больше читал. Я тебе что сказал смотреть? Параметры ком. строки для данной команды. Которые можно применить для определения пользователя - в инете полно примеров.
TASKLIST /FI "USERNAME ne ХХХ"
У тебя проблема с определением юзернейма? Он хранится в параметре, как не странно, %username% данного компьютера. Полная конструкция выглядит как
TASKLIST /FI "USERNAME eq %username%".
Дальше скрипт поправить сможешь? Ведь не сложно же, нужно только малость времени и желание разобраться. Без него -
Цитата:

Цитата ShaddyR
писать заявление "по-собственному" »

ЗЫ:
Цитата:

Цитата sigmatik
Во-первых, я не припомню когда мы перешли на "Ты" Оо »

->>
Цитата:

мы обращаемся на "Вы" к тем, кто нам либо не симпатичен, либо закомплексован. Мы не обращаем внимания на возраст собеседников и считаем себя одним братством IT-шников. Раз уж тебя коробит этот стиль, будем относиться как к чужому.
(c) Tigr :)
Так понятно?

ЗЗЫ: ответ - под катом. Но сначала попробуй разобраться сам ;)
->>
Код:

tasklist /fi "imagename eq 1cv8s.exe" /FI "USERNAME eq %username%" /fo table /nh | find /c /i "1cv8s.exe"|| start "" "C:\Program Files (x86)\1cv82\common\1cestart.exe"
Путь запуска среды проконтролируй, это - по-умолчанию для х64 и 1С соотв. версии.

sigmatik 10-06-2014 10:18 2362360

Цитата:

Цитата ShaddyR
мы обращаемся на "Вы" к тем, кто нам либо не симпатичен, либо закомплексован. Мы не обращаем внимания на возраст собеседников и считаем себя одним братством IT-шников. Раз уж тебя коробит этот стиль, будем относиться как к чужому. »

Не ну ты тоже молодец, сначала грубишь мне, провоцируешь на конфликт, а потом цитаты приводишь об айтишном братстве...так ведь не делается. На ты, так на ты, я совсем не против.
Цитата:

Цитата ShaddyR
TASKLIST /FI "USERNAME eq %username%". »

А за вот это большое спасибо, до %username% сам недотумкал :)
Цитата:

Цитата ShaddyR
ЗЗЫ: ответ - под катом. Но сначала попробуй разобраться сам »

Разобрался, получилось немного не так, как под катом, но тоже работает:
Код:

tasklist /fi "imagename eq %SEARCH%" /fi "USERNAME eq %username%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start "" "C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /RunModeOrdinaryApplication /S "localhost\base"

Всем спасибо, задача решена!

ShaddyR 10-06-2014 11:36 2362394

Цитата:

Цитата sigmatik
получилось немного не так »

у тебя скрипт для помещения в cmd, что есть не всегда удобно да и не комильфо. Мой вариант - для ярлыка, пользуйся)

ЗЫ: на будущее - на конференции есть раздел, интуитивно непонятно названный Скриптовые языки администрирования Windows. ;) Подобные вопросы в дальнейшем лучше направлять туда.

ЗЗЫ:
Цитата:

Цитата sigmatik
сначала грубишь мне»

заметь, я изначально просто констатировал факт, что ты подтвердил и сам -
Цитата:

Цитата sigmatik
до %username% сам недотумкал »

при том, что
Цитата:

Цитата ShaddyR
в инете полно примеров »

так что не всегда грубость есть
Цитата:

Цитата sigmatik
провоцируешь на конфликт »

иногда просто суровая правда :)

sigmatik 10-06-2014 14:15 2362455

Цитата:

Цитата ShaddyR
Скриптовые языки администрирования Windows »

Ок , спасибо еще раз!

Curiosity 13-06-2019 15:07 2875487

апну тему, уважаемые коллеги! а есть идеи, как запретить запуск более трех копий? ну вот 2 копии можно, а 3 уже нельзя
ситуация напрашивается, потому как есть пользователи, работающие в 2-х базах сразу (в одной базе запрет на 2 сессии планируем реализовать через 1С-ку)

Curiosity 14-06-2019 10:57 2875542

Цитата:

Цитата ShaddyR: ЗЗЫ: ответ - под катом. Но сначала попробуй разобраться сам
tasklist /fi "imagename eq 1cv8s.exe" /FI "USERNAME eq %username%" /fo table /nh | find /c /i "1cv8s.exe"|| start "" "C:\Program Files (x86)\1cv82\common\1cestart.exe"
Путь запуска среды проконтролируй, это - по-умолчанию для х64 и 1С соотв. версии.
добавлю также, что в Windows Server 2019 это не работает, появляется DOS-окошко на мгновение и все, не запускает вообще такой ярлык, подскажите, в чем грабли?

Iska 14-06-2019 19:18 2875570

Цитата:

Цитата Curiosity
подскажите, в чем грабли? »

В неопытности, надо полагать.

Откройте окно консоли командной строки cmd.exe. Выполните в ней данный набор команд, не забыв про правильные пути, имена файлов и разрядность.

ShaddyR 15-06-2019 11:48 2875620

Curiosity, для указанной версии ОС нет отличий в работе данной команды. Возможно, требуются права для выполнения скрипта, при необходимости используй дополнительно команду runas


Время: 01:48.

Время: 01:48.
© OSzone.net 2001-