Проверка, запущено ли приложение от конкретного Пользователя
Добрый день. Так как у меня файловый вариант 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С только от Имени Администратора и если нет то запустить. Спасибо. |
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 |
В случае непустой коллекции «"SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'"» — проверьте каждый из объектов, её составляющих, методом «.GetOwner()»: GetOwner method of the Win32_Process class (Windows) на предмет совпадения имени пользователя и домена владельца процесса с именем текущего пользователя/домена.
Update: ага, вижу, уже сами нашли ;). Только проверяйте ещё и совпадение домена — второй параметр метода «.GetOwner()». |
Цитата:
|
Время: 18:01. |
Время: 18:01.
© OSzone.net 2001-