3

如何执行 MemoryStream 中的程序,这样我就不必先将其保存到硬盘上。该文件可能不会临时保存到硬盘。该程序必须在内存中 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);

现在 MemoryStream 中的所有 100% 工作程序(在 RAM 上),我可以执行该程序吗?非常感谢

4

3 回答 3

2

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

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

于 2009-08-28T09:32:01.230 回答
1

您可以尝试Assembly.Load(byte[]),但您可能必须解决代码访问权限,并且某些防病毒软件可能不允许您这样做。

于 2009-08-28T09:32:32.040 回答
1

这里的关键是从字节数组在内存中构建/加载程序集,请参见. 一旦你有了对程序集的引用,你就可以很容易地访问它的类型并实例化它们。一旦你有了类型实例,就调用它的方法来“运行”你的程序。

于 2009-08-28T09:32:46.377 回答