我将一个.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位版本的视窗不兼容”
如果我运行原始的myFile.exe,它可以工作,但如果我从字节数组重新创建它,它就不能工作。如何使用与原始版本相同的位版本重新创建文件?
发布于 2021-04-23 20:22:44
按照建议,我使用十六进制编辑器来查看原始文件和重新创建的文件之间是否存在差异。
如果我使用下面的语句获得字节数组:
byte[] myFileByteArray = MyConsoleApp.Properties.Resources.myFile与使用我的函数并重新创建文件不同,十六进制编辑器没有显示任何差异,并且可执行文件与原始文件一样工作。
https://stackoverflow.com/questions/67229413
复制相似问题