如何以编程方式将可执行文件(.exe)添加到资源?

时间:2017-02-08 17:41:29

标签: c# .net winforms visual-studio visual-studio-2015

以编程方式将可执行文件(.exe)添加到资源

Visual Studio 2015 - Visual C# - Windows窗体应用程序 - .NET Framework 4.6.1

向资源添加可执行文件(.exe)时出了什么问题?

资源不会与listBox上的其他资源一起显示,也不会返回任何错误。资源的名称在列表框中正确加载,如果我在添加新资源时没有弄错,就会出现问题。

    private void button1_Click(object sender, EventArgs e)
    {
        //Add an .exe file to resources
        byte[] xa;

        xa = FileToByteArray(@"C:\Users\" + System.Environment.UserName + @"\Downloads\executable.exe");

        var str = System.Text.Encoding.Default.GetString(xa);
        using (ResXResourceWriter resx = new ResXResourceWriter(@".\Resources.resx"))
        {
            resx.AddResource("myExe", xa);
        }
        //
        //Add the name of existing resources into a listBox
        ResourceManager mgr = Resources.ResourceManager;
        ResourceSet set = mgr.GetResourceSet(CultureInfo.CurrentCulture, true, true);
        foreach (DictionaryEntry o in set){listBox1.Items.Add((string)o.Key);}
        mgr.ReleaseAllResources();
        //
    }

    //Converts a file to a byte array
    public byte[] FileToByteArray(string fileName)
    {
        byte[] buff = null;
        FileStream fs = new FileStream(fileName,FileMode.Open,FileAccess.Read);
        BinaryReader br = new BinaryReader(fs);
        long numBytes = new FileInfo(fileName).Length;
        buff = br.ReadBytes((int)numBytes);
        return buff;
    }

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

一些事情:

  • System.Text.Encoding.Default.GetString是编码可执行字节的错误方法。如果您需要对它们进行编码(您可能不会 - 请参阅下文),请使用Convert.ToBase64String
  • AddResource有一个带有字节数组的重载。您可能希望使用that one而不是编码字节。
  • 根据所有AddResource重载的文档:"在调用Generate之前不会写入资源。"所以打电话给那个。

另外,请注意我上面的评论。您的FileToByteArray只是重写.NET标准File.ReadAllBytes