您的位置:首页 > 其它

程序中调用进程API时进程打开缓慢引起方法调用失败

2017-06-15 19:28 429 查看

程序中调用进程API时进程打开缓慢引起方法调用失败

昨天中了acaddoc.lsp的病毒,曾经为之困扰了很久,重装cad都搞不定,好在现在懂lisp了,所以今天写一个acaddoc.lsp的查杀工具,为了全盘搜索acaddoc.lsp文件,我使用了Everything的SDK,其搜索速度确实很惊艳。

Everything的SDK必须依赖于Everything.exe程序的运行,这个很麻烦,所以在引用这个程序时,我必须先用进程打开Everything.exe执行文件,然后再通过SDK的dll调用其搜索文件。程序写好后出现了一个问题,怎么搜索都无法搜索文件,后来网上搜资料,发现是CPU的平台问题,Everything是32位程序,而我采用的是anycpu,成默认的是64位优先,所以调用会出错,提示“调用了错误程序”,其解决办法是采用x86CPU,在.net4.5上,可以直接点取“首选32位”菜单。

好像扯远了,最重要的是程序调试好了之后,我发现在vs中运行无误,而我直接运行exe程序时却无法执行搜索,网上查资料说是引用程序路径不正确,经确认我的路径没问题,搞了半天,实在找不到啥原因,烦得不要不要的,后来灵光一现,貌似是exe程序打开的速度慢于我程序执行的速度,实际上我调用程序时,程序在进程中并未完全打开,所以造成失败。经过调整,把打开进程放在窗体加载的时候,然后在窗体关闭时关闭进程,效果立见,完美!

其实在调用程序前,应该判断进程中是否已经有此进程,然后再调用,记得去年写一个调用cad的程序也是遇到这种情况,无赖cad打开太慢,所以在程序中设置了暂停,以等待cad完全打开再运行程序。

通过以上两件事说明一个问题:调用exe进程时,一些exe文件的打开往往较慢,而我们的外壳程序又很简单执行很快时,往往会遇到这种情况,我的解决办法是在使用前判断进程是否成功打开,然后再做其他操作!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐