Показать полную графическую версию : [решено] Как запретить запуск двух и более копий 1С8 в Терминальном сеансе пользователя!
sigmatik
09-06-2014, 14:44
Есть вполне рабочий скрипт проверки наличия запущенной копии приложения, вот он
SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe
Взять отсюда (http://forum.oszone.net/thread-145476.html)
Возможно ли его (скрипт) модифицировать таким образом, чтобы он проверял наличие процесса только в рамках процессов, запущенных от имени текущего пользователя ( в данном случае терминального) ? Также принимаются другие варианты скриптов, имеющих нужный функционал. Спасибо
Возможно ли его (скрипт) модифицировать таким образом, чтобы он проверял наличие процесса только в рамках процессов, запущенных от имени текущего пользователя ( в данном случае терминального) ? »
запускать в контексте пользователя. ваш КО.
а вообще это проще решать средствами 1С - там есть инструмент, которым можно ограничить пользователя одним входом в базу, а не приложением 1cv8.exe
sigmatik
09-06-2014, 15:09
запускать в контексте пользователя. ваш КО. »
Код в студию!
а вообще это проще решать средствами 1С - там есть инструмент, которым можно ограничить пользователя одним входом в базу, а не приложением 1cv8.exe »
Не подходит. Пользователь может одновременно запустить несколько клиентов 1С и выполнить вход в базу только в одном из них. Необходимо запретить именно запуск 1cv8.exe , потому как лицензия на терминальном сервере ограничивает не количество одновременных подключений к базе, а количество одновременно запущенных клиентов. Вот
Пользователь может одновременно запустить несколько клиентов 1С и выполнить вход в базу только в одном из них. Необходимо запретить именно запуск 1cv8.exe , потому как лицензия на терминальном сервере ограничивает не количество одновременных подключений к базе, а количество одновременно запущенных клиентов. »
если речь про лицензии 1С, то вы не правы.
запущенных приложений до нажатия "1С: предприятие" или "конфигуратор" при выбраной базе может быть сколько угодно.
для проверки этого возьмите изолированную виртуальную машину, установите туда 1С и запустите 100 копий приложения без активации лицензии или подключения ключа.
Код в студию! »
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
если речь про лицензии 1С, то вы не правы.
запущенных приложений до нажатия "1С: придприятие" или "конфигуратор" при выбраной базе может быть сколько угодно.
для проверки этого возьмите изолированную виртуальную машину, установите туда 1С и запустите 100 копий приложения без активации лицензии или входа в базу. »
Проверяли уже тысячу раз) Некоторые пользователи очень любят нажимать на левую кнопку мыши по 6-8 раз вместо 2х , как результат - 4,5 а то и 6 запущенных копий 1С , авторизация в которых не выполнена за исключением последней копии, как результат другой пользователь в другом терминальном сеансе пытается запустить 1С и получает сообщение о том, что свободных лицензий не осталось. Возвращаемся к первому пользователю, закрываем все открытые копии 1С кроме последней, опять возвращаемся ко второму пользователю, повторно запускаем 1С - PROFIT !
Так что там с запуском в контексте текущего пользователя? зачем вы мне кидаете мой код, я его уже видел :)
Проверяли уже тысячу раз) Некоторые пользователи очень любят нажимать на левую кнопку мыши по 6-8 раз вместо 2х , как результат - 4,5 а то и 6 запущенных копий 1С , авторизация в которых не выполнена за исключением последней копии, как результат другой пользователь в другом терминальном сеансе пытается запустить 1С и получает сообщение о том, что свободных лицензий не осталось. »
ясно. у нас сквозной вход в базы, поэтому такой проблемы нет.
но я права - у вас уже есть подключение к базе ;), но висит на аутификации. я вам говорила про другое.
Так что там с запуском в контексте текущего пользователя? зачем вы мне кидаете мой код, я его уже видел »
запускайте его в контекте пользвоателя, что вам не ясно?
альтернативно рассмотрите вариант RemoteApp.
зачем вы мне кидаете мой код, я его уже видел »
затем, чтоб ты прочитал параметры данной команды и модифицировал ее соотв. образом. Если ты такого простого действия не осилишь - тренируйся писать заявление "по-собственному" - готовыми скриптами в жизни отделаться не выйдет.
sigmatik
09-06-2014, 15:56
ты такого простого действия не осилишь »
Во-первых, я не припомню когда мы перешли на "Ты" Оо
параметры данной команды »
Во вторых, если ты об этом
TASKLIST /U <домен>\<пользователь>
то довожу до твоего сведения, что этот параметр позволяет запускать команду в контексте указанного в нем пользователя. Если ты внимательнее прочитаешь условия задачи, то, может быть, увидишь, что команда должна выполняться в контексте текущего пользователя.
Опять не понял ? Нужен один универсальный скрипт, который будет работать у всех пользователей одинаково, без указания его ( пользователя ) имени.
запускайте его в контекте пользвоателя, что вам не ясно? »
См комментарий выше
альтернативно рассмотрите вариант RemoteApp. »
Спасибо, но тоже не подходит, так как большинство пользователей сидят за тонкими клиентами, а не за обычными десктопами.
См комментарий выше »
мне этот комментарий ничего не говорит, потому что в вашем скрипте нигде нет tasklist /U,а теперь вы его зачем-то приплетаете.
причём он тут - не ясно.
зачем - не ясно.
Спасибо, но тоже не подходит, так как большинство пользователей сидят за тонкими клиентами, а не за обычными десктопами. »
нет тут смайлика facepalm, ну да ладно.
хинт1:
при входе на ТС можно запускать программу.
хинт2:
1С можно запускать с параметрами подключения к базе.
sigmatik
09-06-2014, 16:15
мне этот комментарий ничего не говорит, потому что в вашем скрипте нигде нет tasklist /U,а теперь вы его зачем-то приплетаете. »
Ок , что вы имели ввиду, когда писали запускайте его в контекте пользвоателя » ?
Разве не tasklist /U ?
при входе на ТС можно запускать программу. »
Спасибо , я в курсе :) . Хинт не решает проблему , описанную в условиях задачи
1С можно запускать с параметрами подключения к базе. »
И об этом я тоже в курсе, сейчас так и настроено, на рабочем столе пользователей ярлык с примерно такой ссылкой
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /RunModeOrdinaryApplication /S "сервер\имя_базы"
Ок , что вы имели ввиду, когда писали »
Разве не tasklist /U ? »
неа.
я говорю про запуск батника в сессии пользователя.
не нужно изобретать дополнительные велосипеды, у вас их уже достаточно.
sigmatik
09-06-2014, 16:39
:o Он итак запускается в сессии пользователя! Где же еще ?
Хм... как бы так объяснить еще понятнее, даже не знаю ...
Взгляните на мой скрипт, его алгоритм прост:
1. Задаем переменную SEARCH , равную названию нужного нам процесса ( в скрипте это notepad.exe )
2. Выполняем команду tasklist , которая возвращает нам список всех активных процессов всех пользователей
3. Ищем в результатах выполнения команды процесс с именем SEARCH
4. Если такой процесс находим - завершаем работу скрипта
5. Если такой процесс не находим - запускаем блокнот start notepad.exe
Так вот , повторюсь, команда tasklist возвращает список всех процессов сервера!. А нужно сделать так, чтобы она возвращала процессы только того пользователя, от имени которого запущен bat'ник , иначе скрипт видит процессы других пользователей, и его работа завершается согласно пункту 4 нашего алгоритма.
2. Выполняем команду tasklist , которая возвращает нам список всех активных процессов всех пользователей »
вы запускате под админом.
запустите под пользователем.
sigmatik, вот меньше бы умничал да больше читал. Я тебе что сказал смотреть? Параметры ком. строки для данной команды. Которые можно применить для определения пользователя - в инете полно примеров.
TASKLIST /FI "USERNAME ne ХХХ"
У тебя проблема с определением юзернейма? Он хранится в параметре, как не странно, %username% данного компьютера. Полная конструкция выглядит как
TASKLIST /FI "USERNAME eq %username%".
Дальше скрипт поправить сможешь? Ведь не сложно же, нужно только малость времени и желание разобраться. Без него -
писать заявление "по-собственному" »
ЗЫ:
Во-первых, я не припомню когда мы перешли на "Ты" Оо »
->>
мы обращаемся на "Вы" к тем, кто нам либо не симпатичен, либо закомплексован. Мы не обращаем внимания на возраст собеседников и считаем себя одним братством IT-шников. Раз уж тебя коробит этот стиль, будем относиться как к чужому. (c) (http://forum.oszone.net/post-1490743.html#post1490743) Tigr (http://forum.oszone.net/member.php?userid=21398) :)
Так понятно?
ЗЗЫ: ответ - под катом. Но сначала попробуй разобраться сам ;)
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
мы обращаемся на "Вы" к тем, кто нам либо не симпатичен, либо закомплексован. Мы не обращаем внимания на возраст собеседников и считаем себя одним братством IT-шников. Раз уж тебя коробит этот стиль, будем относиться как к чужому. »
Не ну ты тоже молодец, сначала грубишь мне, провоцируешь на конфликт, а потом цитаты приводишь об айтишном братстве...так ведь не делается. На ты, так на ты, я совсем не против.
TASKLIST /FI "USERNAME eq %username%". »
А за вот это большое спасибо, до %username% сам недотумкал :)
ЗЗЫ: ответ - под катом. Но сначала попробуй разобраться сам »
Разобрался, получилось немного не так, как под катом, но тоже работает:
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"
Всем спасибо, задача решена!
получилось немного не так »
у тебя скрипт для помещения в cmd, что есть не всегда удобно да и не комильфо. Мой вариант - для ярлыка, пользуйся)
ЗЫ: на будущее - на конференции есть раздел, интуитивно непонятно названный Скриптовые языки администрирования Windows (http://forum.oszone.net/forum-102.html). ;) Подобные вопросы в дальнейшем лучше направлять туда.
ЗЗЫ: сначала грубишь мне»
заметь, я изначально просто констатировал факт, что ты подтвердил и сам -
до %username% сам недотумкал »
при том, что
в инете полно примеров »
так что не всегда грубость есть
провоцируешь на конфликт »
иногда просто суровая правда :)
sigmatik
10-06-2014, 14:15
Скриптовые языки администрирования Windows »
Ок , спасибо еще раз!
Curiosity
13-06-2019, 15:07
апну тему, уважаемые коллеги! а есть идеи, как запретить запуск более трех копий? ну вот 2 копии можно, а 3 уже нельзя
ситуация напрашивается, потому как есть пользователи, работающие в 2-х базах сразу (в одной базе запрет на 2 сессии планируем реализовать через 1С-ку)
Curiosity
14-06-2019, 10:57
Цитата 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-окошко на мгновение и все, не запускает вообще такой ярлык, подскажите, в чем грабли?
подскажите, в чем грабли? »
В неопытности, надо полагать.
Откройте окно консоли командной строки cmd.exe. Выполните в ней данный набор команд, не забыв про правильные пути, имена файлов и разрядность.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.