我想在C#应用程序中嵌入一个命令行实用程序,这样我就可以将其字节作为数组捕获并运行可执行文件,而不必将其作为单独的文件保存到磁盘中(避免将可执行文件存储为单独的文件,并且避免了执行以下操作的能力:在任何地方写入临时文件)。
我找不到仅从其字节流运行可执行文件的方法。 Windows是否要求它在磁盘上,还是有办法从内存中运行它?
如果Windows要求它在磁盘上,.NET框架中是否有一种简单的方法来创建某种类型的虚拟驱动器/文件并将该文件映射到可执行文件的内存流?
最佳答案
您需要在高层托管环境中实现非常低层的,特定于平台的功能。一切皆有可能...但没有人说这很容易...
(顺便说一句,我不知道您为什么认为临时文件管理很麻烦。BCL为您做到了:http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx)
步骤#5和#11应该在finally块中完成和/或使用IDisposable模式。
另一个主要选项是创建一个RAMdrive,在其中写入可执行文件,运行它,然后进行清理。这样做可能会更安全一些,因为您不打算编写自我修改的代码(在任何情况下都很难,但尤其是当代码甚至不是您的代码时)。但是我可以肯定的是,与动态代码注入(inject)选项相比,它需要更多的平台API调用-所有这些自然都需要C++或PInvoke。
关于executable - 如何从内存而不是光盘运行不受管的可执行文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1224149/