【发布时间】:2017-08-28 15:55:29
【问题描述】:
我在类库中有一个可执行文件,该可执行文件在项目属性的“构建操作”字段中标记为嵌入式资源。将文件写入磁盘时,不会引发异常,但尝试运行可执行文件会产生此错误:
“不支持的 16 位应用程序
由于与 64 位版本的 Windows 不兼容,程序或功能“\??\path\to\exe”无法启动或运行。请联系软件供应商询问是否有 64 位 Windows 兼容版本可用。”(不兼容拼写错误是故意的,在错误框中拼写错误)
同样的错误,不同的 exe(来自 Google 图片/MSDN):
我已验证该项目在嵌入 DLL 之前没有损坏,并尝试了许多答案 here 和 here 将文件写入磁盘,但都没有奏效。它们都产生相同的错误。
将可执行文件写入磁盘的代码:
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 中。
【问题讨论】:
-
您是否尝试过在构建设置或程序集中将您的平台目标设置为任何 CPU?
-
@TobiasTheel 是的,目前是。
标签: c# embedded-resource