写入磁盘

时间:2017-08-28 15:55:29

标签: c# embedded-resource

我在类库中有一个可执行文件,它在项属性的Build Action字段中标记为Embedded Resource。将文件写入磁盘时,不会引发异常,但尝试运行可执行文件会产生此错误:

“不支持的16位应用程序

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

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

我已经验证该项在嵌入DLL之前没有损坏,并尝试了许多答案herehere将文件写入磁盘,但没有一个有工作。它们都会产生同样的错误。

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

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;
}

其他可能很重要的信息:

  • 可执行文件位于类库A
  • WriteEmbeddedToDisk()RunExe()属于类库B
  • 中的同一个类
  • 通过相同的进程将不同的可执行文件写入磁盘时发生了同样的错误。该可执行文件也在类库A中。

1 个答案:

答案 0 :(得分:1)

正在写入磁盘的文件是Windows Installer(.msi)。我没有意识到MSI文件没有.exe扩展名,因此将扩展程序更改为.msi可解决此问题。