VB调用资源文件中的EXE怎么办

VB调用资源文件中的EXE怎么办,第1张

可以在程序中检查文件是否运行

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、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9814917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存