如何加载 Win32 可执行文件并从内存运行它

本文关键字:内存 运行 可执行文件 Win32 何加载 加载 | 更新日期: 2023-09-27 18:31:48

如果我在进程中嵌入了一个可执行文件作为资源,并且想直接从内存运行该进程而不将其放在磁盘上。

static void Main()
{
const string pathOfExecutable = @"C:'WINDOWS'system32'notepad.exe"; //size = 67KB 
// read the bytes from the application EXE file
FileStream fs = new FileStream(pathOfExecutable, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] byteArray = br.ReadBytes(Convert.ToInt32(fs.Length));
fs.Close();
br.Close();

//Process.Start(byteArray) //Cannot use this, any other alternative?
}

如何加载 Win32 可执行文件并从内存运行它

>Assembly.Load将加载 .NET 程序集。记事本不是这样的东西。这是一个普通的旧本机 Win32 应用程序。您尝试执行的操作无法通过Assembly.Load完成。

您的方法仅适用于托管可执行文件。 记事本.exe是本机可执行文件。若要运行它,请使用 Process 类。

一种解决方案是将内存内容写入临时文件(Path.GetTempFileName),然后使用Process.Start()运行它