把一个已经编译好的子程序t1.exe文件加到当前项目中,并且设置为“嵌入的资源”,在主程序中使用反射来加载并运行它,具体代码如下: Stream sr = Assembly.GetExecutingAssembly().GetManifestResourceStream("ExecuteExeFileInMemory.t1.exe");
byte[] fileBytes = new byte[sr.Length];
sr.Read(fileBytes, 0, (int)sr.Length - 1);
Assembly assembly = Assembly.Load(fileBytes);
MethodInfo mi = assembly.EntryPoint;
mi.Invoke(null, null);这也是网上通行的用C#制作加壳程序的方法,但当程序执行到最后一句时,就出错,信息为“调用的目标发生了异常”,而t1.exe是正确的。请问该如何解决此问题?
byte[] fileBytes = new byte[sr.Length];
sr.Read(fileBytes, 0, (int)sr.Length - 1);
Assembly assembly = Assembly.Load(fileBytes);
MethodInfo mi = assembly.EntryPoint;
mi.Invoke(null, null);这也是网上通行的用C#制作加壳程序的方法,但当程序执行到最后一句时,就出错,信息为“调用的目标发生了异常”,而t1.exe是正确的。请问该如何解决此问题?
<-- 这个是去寻找Main主函数,楼主查看一下ExecuteExeFileInMemory.t1.exe的Main函数
你通过这样的方法启动 环境不太一样
导致路径操作等等出错了,我以前经常发现这类问题
你在调用的方法里面加一个大trycatch看看
byte[] fileBytes = new byte[streamObj.Length];
streamObj.Read(b, 0, b.Length);
Assembly a = Assembly.Load(fileBytes);
Type[] mytypes = a.GetTypes();
BindingFlags flags = (BindingFlags.NonPublic |BindingFlags.Public| BindingFlags.Static|BindingFlags.Instance|BindingFlags.DeclaredOnly);
foreach(Type t in mytypes)
{
MethodInfo[] mi = t.GetMethods(flags);
Object obj = Activator.CreateInstance(t);
foreach(MethodInfo m in mi)
{
}
}