我试图将一些.exe和.dll文件嵌入到我的应用程序中(只需将所需文件包含到我的项目中,右键单击它们并将生成操作更改为“嵌入式资源”)。这里是我的代码以提取:使用反射从资源提取的.exe和.dll文件无效?
private void ExtractTo(string path){
string filename = "MyNamespace.Resources.MyEmbeddedEXEfile.exe";
Assembly asm = Assembly.GetExecutingAssembly();
string[] resourceNames = asm.GetManifestResourceNames();
if(resourceNames.Contains(filename)){
Stream s = asm.GetManifestResourceStream(filename);
byte[] buffer = new byte[s.Length];
File.WriteAllBytes(path + "\\MyEXEfile.exe", buffer);
}
}
它似乎运作良好,嵌入的文件提取到传递的路径,它具有相同的大小,以我包括在我的项目和嵌入式的资源文件。但它似乎已损坏,点击提取的EXE文件后,出现错误对话框,显示“该文件的版本与您正在运行的Windows版本不兼容。请检查计算机的系统信息,看看您是否需要一个x86(32位)或x64(64位)的程序,然后联系你的软件发行商。“ 嗯,我正是该软件的发行商=))。
我正在使用Windows 7旗舰版64位。原始文件(我选择嵌入)是一个32位文件。我也尝试过使用dll文件,并且提取的dll文件也无法像原始文件一样工作。
请问您能否指出我的代码中提取资源时出现了什么问题,或者在我将其嵌入资源后文件被损坏?
您的帮助将不胜感激。谢谢。
你没有努力自己解决问题。你有没有检查文件是否保存到磁盘?你有没有检查保存的文件是否与嵌入到程序集中的原始文件相同?你有没有检查原始文件是否在第一个地方运行? – 2013-04-06 17:57:47
@NikolaRadosavljević他实际上做了,你只需要读一点:保存的文件具有相同的大小,并且他尝试执行。 (奇怪......他没有真正阅读......但仍然) – 2013-04-06 18:00:41
@KingKing这可能也有帮助http://stackoverflow.com/questions/96732/embedding-one-dll-inside-another-as-an -embedded-resource-and-then-calling-it-fro?lq = 1 – 2013-04-06 18:04:14