|
Помогите разобраться с процессами
|
|||
---|---|---|---|
#18+
Новая проблема. На сервере в терминалах работают несколько юзеров. Данный метод находит первый попавшийся bank.exe другого юзера. Надо теперь еще и имя юзера как-то учесть. loItems = loWMI.ExecQuery("Select * From Win32_Process") - туда возвращаются имена пользователя? Я не могу найти как его вытащить. loItems.csname вытаскиваем имя компа есть метод в Win32_Process - getowner, но не пому как работает и то ли это что мне надо.... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2013, 10:38 |
|
Помогите разобраться с процессами
|
|||
---|---|---|---|
#18+
В цикле делаешь проверку NameOfUser = "" ErrorCode = loItem.GetOwner(NameOfUser) IF ErrorCode <> 0 значит какая-то ошибка, коды ошибок: 0 Successful Completion 2 Access Denied 3 Insufficient Privilege 8 Unknown Failure 9 Path Not Found 21 Invalid Parameter ELSE WAIT WINDOW NameOfUser ENDIF ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2013, 10:50 |
|
Помогите разобраться с процессами
|
|||
---|---|---|---|
#18+
Спасибо, помогли очень. Полный текст такой (анализ ошибок не делал, т.к. он не нужен) авторloWMI = GetObject("winmgmts:" + "{impersonationLevel=impersonate}!\\.\root\cimv2") loItems = loWMI.ExecQuery("Select * From Win32_Process where Name='bank.exe'") LocShe = CreateObject("WScript.Shell") nPID=0 FOR EACH loItem in loItems IF UPPER(loItem.Name) = "BANK.EXE" &&Проверка на всякий случай NameOfUser = "" ErrorCode = loItem.GetOwner(NameOfUser) IF ErrorCode=0 AND ALLTRIM(UPPER(NameOfUser))=ALLTRIM(UPPER(ALLTRIM(SUBSTR(SYS(0),AT('#',SYS(0))+1)))) nPID=LoItem.ProcessID LocShe.AppActivate(nPID) LocShe.SendKeys("%+{Enter}") ENDIF ENDIF ENDFOR IF nPID=0 LocShe.Run('bank.exe',3,0) ENDIF RELEASE LocShe ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2013, 16:21 |
|
Помогите разобраться с процессами
|
|||
---|---|---|---|
#18+
Новый день принес новую проблему. Когда идет запуск в RDP из под админксой учетки - все нормально, сам все проверил - успокоился. Юзеры утром пришли - не запускается. на строке ErrorCode = loItem.GetOwner(NameOfUser) пишет "ole exception error: exception code c0000005 object may be corrupt" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 11:36 |
|
Помогите разобраться с процессами
|
|||
---|---|---|---|
#18+
Если вместо NameOfUser = "" ErrorCode = loItem.GetOwner(NameOfUser) делаю PUBLIC NameOfUser ErrorCode = loItem.GetOwner(NameOfUser) то возвращает ответ ErrorCode = 2 - то есть нет доступа и NameOfUser = .T. но когда ставлю NameOfUser = "" - то вышеуказанная ошибка возникает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 12:34 |
|
Помогите разобраться с процессами
|
|||
---|---|---|---|
#18+
Все, добил, немного костылями, но работает, выделенное жирным - изменения loWMI = GetObject("winmgmts:" + "{impersonationLevel=impersonate}!\\.\root\cimv2") loItems = loWMI.ExecQuery("Select * From Win32_Process where Name='bank.exe'") LocShe = CreateObject("WScript.Shell") nPID=0 FOR EACH loItem in loItems IF UPPER(loItem.Name) = "BANK.EXE" PUBLIC NameOfUser NameOfUser = "" OLEerror=0 ON ERROR OLEerror=1 ErrorCode = loItem.GetOwner(NameOfUser) ON ERROR IF OLEerror=0 AND ErrorCode=0 AND ALLTRIM(UPPER(NameOfUser))=ALLTRIM(UPPER(ALLTRIM(SUBSTR(SYS(0),AT('#',SYS(0))+1)))) nPID=LoItem.ProcessID LocShe.AppActivate(nPID) LocShe.SendKeys("%+{Enter}") ENDIF RELEASE NameOfUser ENDIF ENDFOR IF nPID=0 LocShe.Run('bank.exe') ENDIF RELEASE LocShe Дело в том, что юзеру нет доступа к чужим процессам, я просто скипаю ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 13:21 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1582918]: |
0ms |
get settings: |
11ms |
get forum list: |
23ms |
check forum access: |
3ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 294ms |
total: | 560ms |
0 / 0 |