首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将B.exe导入A.exe,然后从A.exe运行B.exe

将B.exe导入A.exe,然后从A.exe运行B.exe
EN

Stack Overflow用户
提问于 2011-04-12 02:28:55
回答 2查看 1.4K关注 0票数 0

我正在使用Visual Basic 2008,我有一个关于它的问题?

我有a.exeb.exe ( a.exe是一个vbAppb.exe是一个可执行文件)。是否可以将b.exe包含到a.exe中,然后从a.exe运行它?例如,将b.exe导入到vbProject中,然后在不提取它的情况下运行它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-12 02:50:06

这个问题有点模糊,但你肯定可以用几种不同的方式来做一些事情。

首先,你当然可以把一个单独的EXE (我称之为EXEA)编译成一个VB项目(称之为EXEB)。当用户运行EXEB时,它会提取包含EXEA的资源,将其保存为文件(可能保存到temp文件夹或具有写权限的某个位置),然后将shell保存到EXEA。

另一种可能是将外部功能编译成DLL,将其称为DLLA,然后将该dll编译成VB项目(称为EXEB)。

当用户运行EXEB时,它提取包含DLLA的资源,将其存储为内存流,然后使用ASSEMBLY.LOAD从内存流(而不是从文件)加载dll,然后可以从该DLL创建对象,并正常使用它。

不过,在这两种情况下,编译第二个EXE或DLL并将它们都包含在MSI安装项目中可能会更好。

问题中的更多细节可能也有助于缩小其他可能的解决方案的范围。

票数 0
EN

Stack Overflow用户

发布于 2013-07-28 05:12:25

试试这个:

1)打开B.exe的工程。

2)在项目B中创建一个新模块,添加"Sub Main“,然后编写

Sub Main(Byval args() As String)

Dim X As New Form1 'replace Form1" with your real startup form

X.ShowDialog

End Sub

3)打开项目B的属性,取消选中名为"Enable application framework“的复选框。将"Startup Object“更改为"Sub Main”

4)编译并关闭项目B。

5)现在打开A.exe的工程,使用以下代码在内存中运行B.exe:

Dim tmpAssembly As System.Reflection.Assembly = System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes("C:\b.exe"))'Replace "C:\b.exe" real b.exe path

Dim TmpMethod As MethodInfo = tmpAssembly.EntryPoint

If TmpMethod IsNot Nothing Then

Dim TmpObject As Object = tmpAssembly.CreateInstance(TmpMethod.Name)

Dim args() As String = Nothing

TmpMethod.Invoke(TmpObject , args)

End If

Me.Close()

注意!只有在对应用程序执行了步骤1和2之后,才能在内存上运行这些应用程序。否则,您将得到尚未解决的错误...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5625738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档