如何解决加载 .Net Core x64 exe 作为 .Net 程序集并启动进程 C#
我现在使用的是:
using System.Reflection;
using System.Threading;
public static class MemoryUtils
{
public static Thread RunFromMemory(byte[] bytes)
{
var thread = new Thread(new ThreadStart(() =>
{
var assembly = Assembly.Load(bytes);
MethodInfo method = assembly.EntryPoint;
if (method != null)
{
method.Invoke(null,null);
}
}));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
return thread;
}
}
实施:
var bytes = File.ReadAllBytes(@"C:\myexecutable.exe");
MemoryUtils.RunFromMemory(bytes).Join();
但问题是,它只适用于 32 位可执行文件,而可执行文件是 64 位。知道我该怎么做吗,有什么建议吗?谢谢
我得到的错误:
System.BadImageFormatException: 'Bad IL format.'
解决方法
但问题是,它只适用于 32 位进程,并且可执行文件是 64 位。关于我如何做到这一点的任何想法,有什么建议吗?
目前还不清楚您遇到了什么错误,或者您所说的“仅适用于 32 位进程”是什么意思。但是,我怀疑您正在尝试加载错误的文件。
不可移植的 .NET Core .exe 不是有效的托管程序集。如果您希望能够使用 Assembly.Load()
加载 .NET Core 程序,则必须将其编译为可移植程序集,并且必须加载生成的 .dll 文件,而不是.exe(后者只是知道如何运行 .dll 的小存根)。
因此,您需要:
- 确保您将
myexecutable.csproj
编译/发布为可移植程序集,并且 - 确保加载
myexecutable.dll
,而不是myexecutable.exe
(即var bytes = File.ReadAllBytes(@"C:\myexecutable.dll");
)
有关编译 .NET Core 程序的各种方法的更多详细信息,请参阅 Build .NET Core console application to output an EXE。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。