由于与64位版本的Windows不兼容,从字节数组重新创建的可执行文件无法运行



我将一个.exe文件作为文件存储在控制台应用程序的资源中。我有一个读取文件二进制数据的功能,然后我从中重新创建一个文件:

private static byte[] GetScriptFromResources(string fileName)
{
byte[] data = null;
Assembly assembly = Assembly.GetExecutingAssembly();
Stream fileStream = assembly.GetManifestResourceStream(ResourceStream);
if (fileStream != null)
{
var resourceReader = new System.Resources.ResourceReader(fileStream);
resourceReader.GetResourceData(fileName, out string _, out data);
}
return data;
}
var myFile = GetScriptFromResources(MyResourceName);
File.WriteAllBytes(Directory.GetCurrentDirectory() + "\" + myFile + ".exe", myFile );

当我运行myFile.exe时,我得到一个错误;不支持的16位应用程序";以及";由于与64位版本的Windows不兼容而无法运行";

如果我运行原始的myFile.exe,它可以工作,但如果我从字节数组重新创建它,它就不工作。如何使用与最初相同的位版本重新创建文件?

根据建议,我使用了一个十六进制编辑器来查看原始文件和重新创建的文件之间是否存在差异。

如果我使用以下语句获取字节数组:

byte[] myFileByteArray = MyConsoleApp.Properties.Resources.myFile

hex编辑器没有显示任何差异,可执行文件与原始文件一样工作,而不是使用我的函数并重新创建文件。

最新更新