写入磁盘后可执行文件损坏

Executable is corrupted after writing to disk

我在 Class 库中有一个可执行文件,它在项目属性的“构建操作”字段中标记为嵌入式资源。将文件写入磁盘时,不会引发异常,但尝试 运行 可执行文件会产生此错误:

“不支持的 16 位应用程序

由于与 Windows 的 64 位版本不兼容,程序或功能“\??\path\to\exe”无法启动或 运行。请联系软件供应商询问是否有 64 位 Windows 兼容版本。”(不兼容拼写错误是故意的,在错误框中拼写错误)

相同的错误,不同的 exe(来自 Google Images/MSDN):

我已经验证该项目在嵌入 DLL 之前没有损坏,并且尝试了很多答案 here and here 将文件写入磁盘,其中 none工作了。它们都产生相同的错误。

将可执行文件写入磁盘的代码:

public static void WriteEmbeddedToDisk(string embeddedFilename, System.Type assemblyType, string diskFilepath)
{
    using (var input = Assembly.GetAssembly(assemblyType).GetManifestResourceStream(embeddedFilename))
    using (var output = File.Create(diskFilepath))
    {
        input.CopyTo(output);
    }
}

运行可执行文件的代码:

public static bool RunExe(string path, string arguments)
{
    try
    {
        var psi = new ProcessStartInfo(path, arguments);
        psi.CreateNoWindow = true;
        psi.UseShellExecute = true;
        psi.RedirectStandardOutput = false;

        var process = Process.Start(psi);

        process.WaitForExit();

        process.Close();
    }
    catch
    {
        return false;
    }
    return true;
}

其他可能重要的信息:

正在写入磁盘的文件是 Windows 安装程序 (.msi)。我没有意识到 MSI 文件不能有 .exe 扩展名,所以将扩展名更改为 .msi 解决了这个问题。