Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写入磁盘后,可执行文件已损坏_C#_Embedded Resource - Fatal编程技术网

C# 写入磁盘后,可执行文件已损坏

C# 写入磁盘后,可执行文件已损坏,c#,embedded-resource,C#,Embedded Resource,我在类库中有一个可执行文件,它在项目属性的Build Action字段中标记为嵌入式资源。将文件写入磁盘时,不会引发异常,但尝试运行可执行文件会产生以下错误: “不支持的16位应用程序 由于与64位Windows版本不兼容,程序或功能“\??\path\to\exe”无法启动或运行。请与软件供应商联系,询问是否有64位Windows兼容版本可用。“(故意将不兼容拼写为错误,错误框中的拼写不正确) 相同的错误,不同的exe(来自Google Images/MSDN): 我已经验证了该项在嵌入DL

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

“不支持的16位应用程序

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

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

我已经验证了该项在嵌入DLL之前没有损坏,并且尝试了许多答案并将文件写入磁盘,但都没有成功。它们都产生相同的错误

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

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中

    • 正在写入磁盘的文件是Windows安装程序(
      .msi
      )。我没有意识到MSI文件不能具有
      .exe
      扩展名,因此将扩展名更改为
      .MSI
      修复了此问题。

      您是否尝试过将平台目标设置为生成设置或程序集中的任何CPU?@Tobiasheel是的,当前是。