我正在使用Visual Basic 2008,我有一个关于它的问题?
我有a.exe和b.exe ( a.exe是一个vbApp,b.exe是一个可执行文件)。是否可以将b.exe包含到a.exe中,然后从a.exe运行它?例如,将b.exe导入到vbProject中,然后在不提取它的情况下运行它。
发布于 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安装项目中可能会更好。
问题中的更多细节可能也有助于缩小其他可能的解决方案的范围。
发布于 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之后,才能在内存上运行这些应用程序。否则,您将得到尚未解决的错误...
https://stackoverflow.com/questions/5625738
复制相似问题