51Testing软件测试论坛

标题: systemutil.CloseProcessByName的工作原理 [打印本页]

作者: wshyzhywx    时间: 2008-11-6 10:26
标题: systemutil.CloseProcessByName的工作原理
哪位知道systemutil.CloseProcessByName的工作原理的? 脚本用大量的这个方法是不是不好 是不是对内存的使用会有影响?
作者: lingxin5013    时间: 2008-11-6 10:33
如 systemutil.CloseProcessByName "iexplore.exe" 
在任务管理起直接关闭进程.
脚本用大量的这个方法是不是不好 ?这是什么意思 没看懂
作者: xiaoshancom    时间: 2008-11-7 16:23
标题: 我想
CloseProcessByName

应该是用CreateToolhelp32Snapshot依次获取到所有进程,在每次移动到next进程之前比较szExeFile的值是否为iexplore.exe,如果是则TerminateProcess。
作者: wshyzhywx    时间: 2008-11-7 20:29
是这样的 我现在在脚本里大量用了这个方法 但是实际效果是 经常弹出内存地址的错误提示  但是也不影响脚本的运行 每次报了错 它又自动把错误提示关了 手动在任务管理器里关掉进程又不会出现这个错误 很无赖..
作者: xiaoshancom    时间: 2008-11-8 13:44
CreateToolhelp32Snapshot这个API在不断枚举的过程中,会引发页面错误,需要从硬盘上读取到物理内存中,需要操作系统重新分配物理内存。

因而,多次使用它会频繁访问磁盘,系统变慢。你可以在任务管理器中查看内存使用。
作者: winfood    时间: 2008-11-9 17:58
原帖由 wshyzhywx 于 2008-11-7 20:29 发表
是这样的 我现在在脚本里大量用了这个方法 但是实际效果是 经常弹出内存地址的错误提示  但是也不影响脚本的运行 每次报了错 它又自动把错误提示关了 手动在任务管理器里关掉进程又不会出现这个错误 很无赖..

仅仅是调用CloseProcessByName关闭IE浏览器进程,应该没有问题吧。无论实现机制如何,QTP也不可能跳过Windows操作系统这个级别。

至于“内存地址错误”,可以考虑一下是不是有如下情况:
1)关闭浏览器时,浏览器中的页面还在加载。这种情况下,手工关闭进程也可能出现异常;
2)两次调用之间间隔太短,QTP帮助中对该方法有这样的注释:
Note: QuickTest initially tries to close the process by sending a WM_CLOSE message to the process window. If the process is still open after 5 seconds, QuickTest terminates the process.
5秒间隔内调用两次相同方法,也许会有问题。

我现在的Case在两种情况下使用这个方法:
a)出现非预期异常的时候,关闭进程并退出当前Case;
b)在每个Case的起始(或者结束)时,清理当前运行环境;
在一个Case当中,如果脚本可以正常运行还是使用Browser.Close方法好些。
作者: wshyzhywx    时间: 2008-11-10 16:09
标题: 回复 6# 的帖子
我不是在关浏览器时出现的问题 是关闭应用程序时出现的问题
作者: xiaoshancom    时间: 2008-11-11 13:54
标题: 回复 7# 的帖子
你会抓dump吗?(装windbg)
把其中一个出错的mini dump抓上来,然后运行:
Analyze -v

把结果贴上来。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2