.NET:将EXE文件嵌入到我的项目中

时间:2010-03-04 23:06:00

标签: vb.net embed exe

我知道这种情况很奇怪,但是我需要将一个EXE文件(或汇编代码)嵌入到我的项目中,因此它只能由应用程序启动(它不能在文件系统中创建EXE并启动它)...

有可能吗?

编辑:

这不是.NET EXE。无论如何,我将Test.exe文件作为资源添加到我的项目中,我做了这个

   Dim exestr As Stream = Nothing
   Dim a As Assembly = Assembly.GetExecutingAssembly
   exestr = a.GetManifestResourceStream("Test.exe")  

3 个答案:

答案 0 :(得分:5)

不可能。这是Dave Cutler和他们在设计Windows NT时做出的核心设计决策。进程必须由文件系统上的文件支持。 Windows使用内存映射文件将进程代码映射到虚拟内存。这对于.NET程序来说并没有什么不同,即使它的许多代码都将JIT编译到内存中。包含IL的程序集以相同的方式映射。

除了高效的操作系统操作外,用户和病毒扫描程序真的不喜欢突然冒出来的可执行代码。

答案 1 :(得分:4)

如果EXE是.Net程序集,您可以将编译后的二进制文件嵌入到(外部)程序中,使用Assembly.Load(byte[])加载它。 编辑:既然不是,你就不能。

加载程序集后,您可以像使用任何其他程序集一样从内部程序集调用函数(例如Main方法),也可以编写AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName)

答案 2 :(得分:2)

我正在考虑创建 RAM disk ,从.NET资源文件中将您的exe文件写入其中,然后在那里执行该文件。什么都没有触及物理磁盘。

我没有可编程RAM磁盘API的链接,但您可能会从程序中找到可以操作的内容。另一个好处是病毒扫描程序仍然可以确认它的安全性。

另外我在想你的应用程序是否在磁盘上运行,那么没有充分的理由说明有问题的可执行文件也不能在磁盘上运行。如果您通过网络(下载)或其它方式进行管道传输,则首先保存到磁盘并在执行完毕后将其擦除