我知道这种情况很奇怪,但是我需要将一个EXE文件(或汇编代码)嵌入到我的项目中,因此它只能由应用程序启动(它不能在文件系统中创建EXE并启动它)...
有可能吗?
编辑:
这不是.NET EXE。无论如何,我将Test.exe文件作为资源添加到我的项目中,我做了这个
Dim exestr As Stream = Nothing
Dim a As Assembly = Assembly.GetExecutingAssembly
exestr = a.GetManifestResourceStream("Test.exe")
答案 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的链接,但您可能会从程序中找到可以操作的内容。另一个好处是病毒扫描程序仍然可以确认它的安全性。
另外我在想你的应用程序是否在磁盘上运行,那么没有充分的理由说明有问题的可执行文件也不能在磁盘上运行。如果您通过网络(下载)或其它方式进行管道传输,则首先保存到磁盘并在执行完毕后将其擦除。