Как Отследить Запущен Процесс Или Нет?
#1
Отправлено 20 июля 2007 - 14:16
У меня возник вопрос : как можно средствами QTP 9.0 отследить есть процесс (запущен ли) или нет. Точнее говоря у меня есть одно приложение , которое должна запускать другое. Вот я хочу проверять запустился процесс или нет. Если же проверять Window("Application").Exist , то работает очень медленно. Хотелось бы просто проверить есть ли процесс. Помогите пожалуйста . Заранее спасибо
И ещё один вопросик: никак не могу найти как при работе с DataTable можно задавать стиль для ячеек (если я например хочу текст красный жирный и т.п.)
#2
Отправлено 20 июля 2007 - 16:02
А если нужен кусок кода для проверки существования процесса, то вот (выдрано из функции, дожидающейся окончания выполнения процесса. если выдрал неаккуратно - извиняюсь):
Dim isProcessRun isProcessRun = False Dim callProcess 'A collection of all processes Set callProcess = objWMIService.ExecQuery ("Select * from Win32_Process") Dim objProcess For Each objProcess In callProcess If UCase(objProcess.Name) = UCase(processName) Then isProcessRun = True Exit For End If Next set callProcess = Nothing
Майк.
#3
Отправлено 23 июля 2007 - 11:40
Идея понятна: выбрать все процессы и найти интерисующий. Но у меня есть некоторые трудности:
1. ExecQuery(..) такой функции я вообще не нашла в хелпе (возможно у меня не хватает каких то аддинов).
Да и неужели нет никакой функции которая позволяет найти процесс по имени.. есть же возможность убить процесс , найдя его по имени..
и касательно моего второго вопроса. Никто не знает как всетаки при работе с DataTable можно задать стиль?
#4
Отправлено 23 июля 2007 - 14:00
Juliya а зачем вам стили? :)...и касательно моего второго вопроса. Никто не знает как всетаки при работе с DataTable можно задать стиль?
Если ТАК уж хочется - закройте QTP, зайдите в папку где хранится DataTable вышего теста и откройте её (по умолчанию - .../название теста/Default.xls), перейдите на нужный лист и делайте с данными что хотите
только аккуратнее.
Можете откыть QTP и наслаждаться!
А вы там смотрите? В QTP Help её и не найдете - это не функция QTP.Идея понятна: выбрать все процессы и найти интерисующий. Но у меня есть некоторые трудности:
1. ExecQuery(..) такой функции я вообще не нашла в хелпе (возможно у меня не хватает каких то аддинов).
Да и неужели нет никакой функции которая позволяет найти процесс по имени.. есть же возможность убить процесс , найдя его по имени..
Справку по ней вы сможете найти в MSDN.
Ну или в google :) и примеры там же.
#5
Отправлено 23 июля 2007 - 14:25
Именно так я сейчас и делаю, но в случае достаточно большого файла это крайне неудобно и приходиться с пол часа тратить на редактирование xls файла и придание ему читабельного вида , не очень то хорошо, согласитесь, учитывая что QTP позволяет задавать стили. Поэтому ОЧЕНЬ как хочеться.Если ТАК уж хочется - закройте QTP, зайдите в папку где хранится DataTable вышего теста и откройте её (по умолчанию - .../название теста/Default.xls), перейдите на нужный лист и делайте с данными что хотите
#6
Отправлено 23 июля 2007 - 15:22
На случай если у кого возникла та же необходимость проверить запущен процесс или нет, привожу код который у меня работает на ура:)
[codebox]On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process")
If objProc.pid= objProc.ProcessId Then
find=true
End If
Next
If find=true Then
MsgBox "Процесс найден!!"
Else
MsgBox "Процесс не найден!!"
End If[/codebox]
#7
Отправлено 24 июля 2007 - 05:26
Кроме этого, эта программа позволяет определить наличие процесса на удаленном компьютере, в нужной сессии (если были коннекты по MSTSC)
Пример : определить наличие NOTEPAd на локальном компе под всеми сессиями:
tasklist /FI "IMAGENAME EQ notepad.exe"
#8
Отправлено 24 июля 2007 - 07:28
Dim objWMIService Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Вот так и бывает, кода пытаешься использовать код, который не сам писал (ту функцию писал мой коллега).
А вот в вашем коде, вот этот кусок
If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If
работать не будет - в QTP объект WScript, к сожалению, не работает. Используйте Reporter.ReportEvent и ExitTest (либо ExitAction) соответственно.
Майк.
#9
Отправлено 24 июля 2007 - 11:35
Нет необходимости сравнивать процесс по PID и делать операции по его нахождению, намного лучше и легче (как мне кажеться ) искать по имени тоесть использовать objProc.Name
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных