以编程方式将可执行文件(.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;
}
提前感谢您的帮助
答案 0 :(得分:1)
一些事情:
System.Text.Encoding.Default.GetString
是编码可执行字节的错误方法。如果您需要对它们进行编码(您可能不会 - 请参阅下文),请使用Convert.ToBase64String
。AddResource
有一个带有字节数组的重载。您可能希望使用that one而不是编码字节。AddResource
重载的文档:"在调用Generate
之前不会写入资源。"所以打电话给那个。另外,请注意我上面的评论。您的FileToByteArray
只是重写.NET标准File.ReadAllBytes
。