Dim s, mFind As Boolean
Dim objWMIService, colProcessList, objProcess
s = "Maxthonexe"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\root\cimv2")
Set colProcessList = objWMIServiceExecQuery("Select from Win32_Process Where Name='" & s & "'")
For Each objProcess In colProcessList
mFind = True '文件正在运行
Exit For
Next
mFind 为假时说明文件已经关闭了,可以删除
推荐使用先将EXE文件释放到临时文件夹再运行的方法
但如果你非要不释放就运行的话,我也可以给你个思路
不过,你的以资源路径运行的要求很难实现,我最后再讲。
首先,你必须非常了解PE文件格式和WINDOWS可执行文件的加载过程
具体实现:
先假设包含另外EXE文件的程序为A,被包含的程序为B
1编译的时候,将A的基地址设置的大于B的内存地址的上限。
2申请开始地址为B程序基地址(一般为400000)的内存空间,并将其属
性改为可读可写可执行。
3COPY B的全部代码过去
4跟据B的导入表,加载各个DLL,并填写IAT的地址。
5在A程序中创建一新的线程,基地址为B的入口。
这样如果没有意外的话,B就以A的一个的线程的形式运行了
但B结束时可能会把A也一块结束掉(可以通过一些 *** 作解决)
关于以资源路径运行:
我想你的意思应该是有个API可以直接,或者很简单的运行资源或者任
意内存中的EXE格式的程序
但据我所知,并没有这样的API
而且不用API也未必就能实现
要想让EXE格式(正式叫法应该是PE)程序在任意内存地址运行,程序
必须是可重定位的(自已重定位,或者依靠重定位表)
但多数EXE格式的WINDOWS程序并没有重定位表,也不会自己重定位。
所以说很难实现
如果你要运行的EXE文件能够重定位,则可以先将对应内存地址改为可
读可写可执行,然后重定位(需要的话),然后填入导入表,最后创建
新线程运行。
以上只是我的思路,没有实践过,这几天忙考试也没时间搞这个。
另外第二步可能会申请失败,如果不行的话可的程序的第一个SECTION
先预留足够多的空间。
以上就是关于VB调用资源文件中的EXE怎么办全部的内容,包括:VB调用资源文件中的EXE怎么办、如何运行资源内的exe 以线程运行exe、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)