|
WQL запрос или средствами 1с узнать "запущена ли у юзера это программа"? | ☑ | ||
---|---|---|---|---|
0
Guerro
23.08.19
✎
09:03
|
Менеджеры пользуются решением от EasyCeiling, и хочется поставить "защиту от дурака" в виде запрета запуска второй копии программы, много статей нашел, но решения не подходя, примеры:
1)Выборка по процессам, но тут не нельзя соотношение сделать user=его процесс. он просто выгружает все процессы windows. locator= Новый COMОбъект("wbemscripting.swbemlocator"); service=locator.connectserver(); oP=service.execquery("select * from Win32_Process"); для каждого p из oP цикл Если p.Name="EasyCeiling.exe" тогда Сообщить(p.Name); КонецЕсли; КонецЦикла; 2)с помощью cmd проверить запущена ли программа, но тут нет возможности запуска файла с помощью программы(как видите программа просто запускается), а нужно чтобы открывался файл, с помощью программы. @Echo off chcp 1251 >nul tasklist /FI "USERNAME eq admin" /FI "IMAGENAME eq EasyCeiling.exe" | find /i "EasyCeiling.exe" if %errorlevel%==1 (start "" "F:\Program Files (x86)\EasyCeiling\EasyCeiling.exe") else (msg user "EasyCeiling уже запущен") Как решить этот вопрос? Помогите, пожалуйста |
|||
1
NorthWind
23.08.19
✎
09:05
|
можно. GetOwner метод у процесса - получает юзера
|
|||
2
NorthWind
23.08.19
✎
09:06
|
||||
3
NorthWind
23.08.19
✎
09:08
|
но как я понимаю, этот метод небыстрый. Поэтому вызывать его надо только для тех процессов, которые уже совпали по названию. Не для всех.
|
|||
4
SSSSS_AAAAA
23.08.19
✎
09:10
|
(0) В общем-то, любой запущенный ехе захватывается эксклюзивно. Намёк понят?
|
|||
5
Guerro
23.08.19
✎
09:11
|
(4) ноу
|
|||
6
Guerro
23.08.19
✎
09:11
|
(4) цикл по exe уже есть, но UserName не вытягивается
|
|||
7
TormozIT
гуру
23.08.19
✎
09:30
|
Консоль запросов с поддержкой WQL https://youtu.be/bFDDJqToPTM думаю поможет разобраться с вариантом №1.
У процесса есть SessionId. Вот скрипт на powerShell проверяющий наличие терминальной сессии для заданного имени пользователя. The following PowerShell example checks for remote session open for a specified user. PowerShell $user = "<user name>" $servers = gci servers.txt foreach ($server in $servers){ $logons = gwmi win32_loggedonuser -computername $server foreach ($logon in $logons){ if ($logon.antecedent -match $user){ $logonid = $logon.dependent.split("=")[1] $session =gwmi win32_logonsession |? {$_.logonid -match $logonid} if ($session.logontype -eq "10"){ Write-host "You have an active Terminal Server session on server $($server)" } } |
|||
8
TormozIT
гуру
23.08.19
✎
09:38
|
(7) +
Тебе нужны таблицы WMI Win32_Process Win32_SessionProcess Win32_LoggedOnUser |
|||
9
Guerro
23.08.19
✎
09:41
|
(7) (8) сейчас попробую реализовать
|
|||
10
Guerro
23.08.19
✎
10:05
|
Все еще проще, решил проблему тем, что в ЗапуститьПриложение(ДанныеДляЗапуска,,Истина), указал 3-ий параметр и пока не закроет, 1С работать не будет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |