给C#程序加壳(C# 调用嵌入资源的EXE文件方法)
2012-11-29 17:53
931 查看
本来想把一个EXE程序变成我的窗口的一部分,试了很久没有成功,也不能说没有收获,这是一个对c#的EXE程序加壳的程序。
代码复制如下:
这是一个错漏百出的程序,参见参考文献4,以至于我弄了很久没有没有结果。
最后弄出来了,总结一下:
1.要加壳的一定是c#程序,我用其他类型程序试过,不可行。
2.必须是嵌入式资源,有关这个解释可以参考文献1和2.
3.我在执行“Stream stream = Assembly. GetExecutingAssembly_r(). GetManifestResourceStream_r("test.Code.exe");”的时候总是得到为null,在参考了文献3以后可以正确获取了值。
最后正确的代码应该是这样的:
参考文献:
1.http://zch448.blog.163.com/blog/static/73706910201231902712864/
2./article/5161078.html
3./article/4923442.html
4./article/4693031.html
代码复制如下:
1. 我们有一个test.exe的WinForm程序,这是我们要加壳的目标程序。 2. 新建一个WinForm工程,删除Form1,然后新建一个类。如下。 3. 将test.exe 拷贝到该工程目录,作为嵌入式资源。 using System; using System.Windows.Forms; using System.Resources; using System.Reflection; using System.IO; namespace test { static class Program { [STAThread] static void Main(string[] args) { Stream stream = Assembly. GetExecutingAssembly_r(). GetManifestResourceStream_r("test.Code.exe"); byte[] bs = new byte[stream.Length]; stream.Read(bs, 0, (int)stream.Length); Assembly asm = Assembly.Load(bs); MethodInfo info = asm.EntryPoint; ParameterInfo[] parameters = info. GetParameters_r(); if ((parameters != null) && (parameters.Length > 0)) info.Invoke(null, (object[])args); else info.Invoke(null, null); } } }
这是一个错漏百出的程序,参见参考文献4,以至于我弄了很久没有没有结果。
最后弄出来了,总结一下:
1.要加壳的一定是c#程序,我用其他类型程序试过,不可行。
2.必须是嵌入式资源,有关这个解释可以参考文献1和2.
3.我在执行“Stream stream = Assembly. GetExecutingAssembly_r(). GetManifestResourceStream_r("test.Code.exe");”的时候总是得到为null,在参考了文献3以后可以正确获取了值。
最后正确的代码应该是这样的:
using System; using System.Windows.Forms; using System.Resources; using System.Reflection; using System.IO; namespace MyNamespace { public class Program { [STAThread] static void Main(string[] args) { String projectName = Assembly.GetExecutingAssembly().GetName().Name.ToString(); Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(projectName + ".test.exe"); byte[] bs = new byte[stream.Length]; stream.Read(bs, 0, (int)stream.Length); Assembly asm = Assembly.Load(bs); MethodInfo info = asm.EntryPoint; ParameterInfo[] parameters = info.GetParameters(); if ((parameters != null) && (parameters.Length > 0)) info.Invoke(null, (object[])args); else info.Invoke(null, null); } } }
参考文献:
1.http://zch448.blog.163.com/blog/static/73706910201231902712864/
2./article/5161078.html
3./article/4923442.html
4./article/4693031.html
相关文章推荐
- 给C#程序加壳(C# 调用嵌入资源的EXE文件方法)
- [转]将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- C# 加壳.exe程序文件(调用嵌入资源的exe文件)
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 黄聪:将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- C#调用Exe文件的方法及如何判断程序调用的exe已结束
- C#调用Exe文件的方法及如何判断程序调用的exe已结束
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- c#调用EXE文件方法
- C# 获取资源文件中的DLL,调用DLL中的方法
- C# 使用 Environment.GetCommandLineArgs 方法 制作*.exe和参数 供其他程序调用
- Matlab程序调用外部exe(可执行文件)方法及参数传递
- c#调用 windows api实现WinForm中嵌入EXE程序
- C# Vs2005资源文件嵌入资源使用方法
- c#调用 windows api实现WinForm中嵌入EXE程序
- C# 使用 Environment.GetCommandLineArgs 方法 制作*.exe和参数 供其他程序调用