【问题标题】:C# Run From BytesC# 从字节运行
【发布时间】:2010-10-23 22:37:10
【问题描述】:

我正在努力让我的客户通过下载字节并使用反射打开另一个程序来打开它。我目前已经在 C# 控制台应用程序上进行了此操作,但是当我尝试在 Windows 窗体应用程序上执行此操作时出现此错误。

“调用的目标已抛出异常。”

这里是代码

using System;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
    private void listBox1_DoubleClick(object sender, EventArgs e)
    {
        if (listBox1.SelectedItem.ToString() != null)
        {
            if (MessageBox.Show("Run " + listBox1.SelectedItem.ToString() + "?", "Run this program?", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                byte[] bytes;
                using (WebClient client = new WebClient())
                {
                    bytes = client.DownloadData(new Uri("http://example.net/program.exe"));
                }
                RunFromBytes(bytes);
            }
        }
    }
    private static void RunFromBytes(byte[] bytes)
    {
        Assembly exeAssembly = Assembly.Load(bytes);
        exeAssembly.EntryPoint.Invoke(null, null);
    }

【问题讨论】:

  • 您能否提供堆栈跟踪(以及内部异常的详细信息,如果有)?

标签: c# .net reflection assemblies byte


【解决方案1】:

您必须执行以下操作:

  1. 创建一个新的application domain
  2. 将字节数组写入文件
  3. ExecuteAssembly执行

这是代码:

File.WriteAllBytes("yourApplication.exe", bytes);
AppDomain newDomain= AppDomain.CreateDomain("newDomain");
newDomain.ExecuteAssembly("file.exe");

祝你好运!

【讨论】:

    【解决方案2】:

    那是因为您正试图从另一个线程访问您的表单控件。 看这里:http://www.yoda.arachsys.com/csharp/threads/winforms.shtml

    【讨论】:

    • +1 我的假设是一样的:您在不常见的情况下遇到了常见错误。还要检查 stackoverflow 以获得有关 winforms 线程问题的答案。您可能会找到合适的。
    【解决方案3】:

    你可以这样做:

    private static void RunFromBytes(byte[] bytes)
    {
    
    Assembly exeAssembly = Assembly.Load(bytes);
    var entryPoint = exeAssembly.EntryPoint;
    var parms = exeAssembly.CreateInstance(entryPoint.Name);
     entryPoint.Invoke(parms, null);
    }
    

    【讨论】:

    • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多