Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Проверка, запущено ли приложение от конкретного Пользователя

Ответить
Настройки темы
VBS/WSH/JS - Проверка, запущено ли приложение от конкретного Пользователя

Старожил


Сообщения: 225
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Добрый день. Так как у меня файловый вариант 1С мне приходиться держать одну сессию данного приложения открыто. Очень хорошо с этим справлялся вот этот скрипт
[code][/Option Explicit

Const Above_Normal = 32768

Dim objSWbemObjectEx
Dim lngProcessID


With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
If .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'").Count = 0 Then
Set objSWbemObjectEx = .Get("Win32_ProcessStartup")

objSWbemObjectEx.PriorityClass = Above_Normal

' Create method of the Win32_Process class (Windows) (http://msdn.microsoft.com/en-us/library/aa389388(v=vs.85).aspx)
If .Get("Win32_Process").Create( _
"""C:\Program Files (x86)\1cv82\8.2.16.352\bin\1cv8.exe""", _
"C:\Program Files (x86)\1cv82\8.2.16.352\bin", _
objSWbemObjectEx, _
lngProcessID _
) <> 0 Then
WScript.Echo "Can't start process [""%Program Files (x86)\1cv82\8.2.16.352\bin""."
End If

Set objSWbemObjectEx = Nothing
End If
End With

WScript.Quit 0
CODE]
но беда в том, что у меня терминальный сервер и если один из пользователей имеет запущенный процесс 1С то данный скрипт не выполняется.
Так как в данных скриптах я не силен прошу подсказать, что добавить в скрипт или переделать, что бы проверялся на запущенный процесс 1С только от Имени Администратора и если нет то запустить. Спасибо.

Отправлено: 11:12, 16-03-2015

 

Старожил


Сообщения: 225
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Const Above_Normal = 32768

Dim objSWbemObjectEx
Dim lngProcessID
Dim colProcesses
Dim bUser
Dim strNameOfUser
Dim UserName
UserName = CreateObject("WScript.Network").UserName

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set colProcesses = .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'")
Set objSWbemObjectEx = .Get("Win32_ProcessStartup")
bUser = False

For Each objProcess in colProcesses
Return = objProcess.GetOwner(strNameOfUser)
If Return = 0 Then
If strNameOfUser = UserName Then
bUser = True
End If
End If
Next

If Not bUser Then
objSWbemObjectEx.PriorityClass = Above_Normal

' Create method of the Win32_Process class (Windows) (http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx)
If .Get("Win32_Process").Create( _
"""C:\Program Files (x86)\1cv82\8.2.16.352\bin\1cv8.exe""", _
"C:\Program Files (x86)\1cv82\8.2.16.352\bin", _
objSWbemObjectEx, _
lngProcessID _
) <> 0 Then
WScript.Echo "Can't start process [""%Program Files (x86)\1cv82\8.2.16.352\bin""."
End If

Set objSWbemObjectEx = Nothing
End If
End With

WScript.Quit 0

Отправлено: 15:45, 16-03-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


В случае непустой коллекции «"SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'"» — проверьте каждый из объектов, её составляющих, методом «.GetOwner()»: GetOwner method of the Win32_Process class (Windows) на предмет совпадения имени пользователя и домена владельца процесса с именем текущего пользователя/домена.

Update: ага, вижу, уже сами нашли . Только проверяйте ещё и совпадение домена — второй параметр метода «.GetOwner()».
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:55, 16-03-2015 | #3


Старожил


Сообщения: 225
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
В случае непустой коллекции «"SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'"» — проверьте каждый из объектов, её составляющих, методом «.GetOwner()»: GetOwner method of the Win32_Process class (Windows) на предмет совпадения имени пользователя и домена владельца процесса с именем текущего пользователя/домена.

Update: ага, вижу, уже сами нашли . Только проверяйте ещё и совпадение домена — второй параметр метода «.GetOwner()».
Понял, спасибо

Отправлено: 17:02, 16-03-2015 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Проверка, запущено ли приложение от конкретного Пользователя

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Ярлык на смену пользователя/на вход в конкретного пользователя. dance-saf Microsoft Windows 8 и 8.1 1 30-05-2014 01:31
Ошибка - [решено] Приложение не было запущено, поскольку оно некорректно настроено Vygov Microsoft Windows 2000/XP 194 10-11-2013 05:06
Log/Monitoring - Отслеживание трафика конкретного пользователя GuitarFan Сетевые технологии 13 20-10-2013 01:18
7554 "Приложение не было запущено.." ArtemBeGooD Игры 2 30-03-2012 19:14
PowerShell - Поиск в определенной группе конкретного пользователя ejik_off Скриптовые языки администрирования Windows 1 26-12-2011 10:15




 
Переход