いくつかの .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 Ultimate 64 ビットを使用しています。元のファイル (埋め込み用に選んだもの) は 32 ビット ファイルです。私もdllファイルを試してみましたが、抽出されたdllファイルも元のファイルとして機能しませんでした。
リソースを抽出するためのコードのどこが間違っているか、またはリソースとして埋め込んだ直後にファイルが破損していることを指摘していただけますか?
どうぞよろしくお願いいたします。ありがとう。