有那位大哥可以教教我,如何调用嵌入的资源中的EXE文件。是这样的,我做一个小程序,abc.exe。然后把另一个程序cat.exe以嵌入的资源方式加入abc.exe中。
请问大哥们,是什么方法可以调用(启动)cat.exe。我只能用
Process.Start("cat.exe");只能abc.exe程序同目录下的运行cat.exe。请大家给我点建议。
请问大哥们,是什么方法可以调用(启动)cat.exe。我只能用
Process.Start("cat.exe");只能abc.exe程序同目录下的运行cat.exe。请大家给我点建议。
http://tech.sina.com.cn/s/2005-04-13/0947580532.shtml用流的方式读出,然后保存为可执行文件,然后用
Process.Start("cat.exe");
的方法执行。BTW:如果能不保存为文件,直接用流来执行,想想真cool,还是挺有意思的,
今天晚上想想。呵呵
streamObj.Read(b, 0, b.Length); FileStream fileObj = new FileStream("aa.exe", FileMode.CreateNew);
BinaryWriter writerObj = new BinaryWriter(fileObj);
fileObj.Write(b, 0, b.Length); fileObj.Close();
writerObj.Close();
streamObj.Close();保存成文件的方式。
直接执行的方式思考&实践中......
鼓捣了一阵,辛苦没白费,可以直接执行作为资源嵌入的可执行文件,
目前只是显示出了可执行文件的界面,不知道在复杂程序中用我的办法有没有什么副作用。
有愿意研究一下的兄弟可以看看我下面的代码:Stream streamObj = this.GetType().Assembly.GetManifestResourceStream("Test_ExeInResource.AllTest.exe");byte[] b = new byte[streamObj.Length];
streamObj.Read(b, 0, b.Length);Assembly a = Assembly.Load(b);
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)
{
if (m.Name == "Main")
{
MainDelegate md =
(MainDelegate)Delegate.CreateDelegate(typeof(MainDelegate), m);
md.BeginInvoke(null, null);
}
}
}
不过事实说明是不对的,鼓捣了一阵,辛苦没有白费,可以直接执行
作为资源嵌入的可执行文件,目前可以调用嵌入可执行文件的Main方法,
从而达到执行嵌入可执行文件的目的。
有兴趣的兄弟可以看看我的代码,欢迎讨论:Stream streamObj = this.GetType().Assembly.GetManifestResourceStream("Test_ExeInResource.AllTest.exe");byte[] b = new byte[streamObj.Length];
streamObj.Read(b, 0, b.Length);Assembly a = Assembly.Load(b);
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)
{
if (m.Name == "Main")
{
MainDelegate md =
(MainDelegate)Delegate.CreateDelegate(typeof(MainDelegate), m);
md.BeginInvoke(null, null);
}
}
}