C# 从MemoryStream执行程序

C# 从MemoryStream执行程序,c#,execute,memorystream,C#,Execute,Memorystream,如何执行内存流中的程序,这样就不必先将其保存到硬盘上。文件不能临时保存到硬盘上。程序必须在内存中100%运行 static string strTemplate = "MyAPP.SOMEprogram.exe"; byte[] template; int len = 0; Assembly assembly = Assembly.GetExecutingAssembly(); using (Stream st

如何执行内存流中的程序,这样就不必先将其保存到硬盘上。文件不能临时保存到硬盘上。程序必须在内存中100%运行

        static   string strTemplate = "MyAPP.SOMEprogram.exe";
        byte[] template;
        int len = 0;

        Assembly assembly = Assembly.GetExecutingAssembly();
        using (Stream stream = assembly.GetManifestResourceStream(strTemplate))
        {

            len = (int)stream.Length;
            BinaryReader reader = new BinaryReader(stream);
            template = reader.ReadBytes(len);


        }

        MemoryStream ms = new MemoryStream(template, true);
现在所有的100%工作程序都在MemoryStream(RAM)中,我能执行这个程序吗?
非常感谢

我想不出一个明显的方法来做到这一点。我能想到的最接近的方法是使用RAM光盘——您将无法访问硬盘(除了可能的分页),但这与您所要求的仍然非常不同


请注意,我所说的是运行任意程序,而不是加载托管程序集。

您可以尝试,但可能必须解决代码访问权限问题,某些防病毒软件可能不允许您这样做。

这里的关键是从字节数组在内存中构建/加载程序集。一旦有了对程序集的引用,就可以轻松地访问其类型并实例化它们。一旦你得到类型实例,就调用它上的一个方法来“运行”你的程序。

是的,你正确的Assembly.Load(字节[]),但它只有在字节[]数组中包含.net程序时才起作用,否则不起作用,是我对吗?是的,你是对的。请更新您的问题,如果您想在.NET App.Cudio..…中加载本地资源作为应用程序的.. ..:Load方法(数组[]),这对于C++中的程序而不是C语言中的程序是有效的吗?thanksI假设您不是在谈论加载托管程序集,对吗?您必须安装一个驱动程序,调用驱动程序API来创建一个新的RAM磁盘,然后您可以像使用每个普通驱动器一样使用它-将您的程序写入RAM磁盘上的文件并执行它。列出了几种RAM光盘驱动程序,有些是源代码提供的,但如何准确安装驱动程序并与之交互可能在很大程度上取决于您选择的驱动程序。您应该开始阅读文档和源代码(如果有),然后看看如何继续。谢谢,但所有的问题是我不想让用户看到程序执行的frm,我想要复制保护,这里的ram磁盘可以帮助吗?不(容易),因为用户也可以看到ram磁盘。但是,用户也很容易从资源文件中提取程序。