我在类库中有一个可执行文件,它在项属性的Build Action字段中标记为Embedded Resource。将文件写入磁盘时,不会引发异常,但尝试运行可执行文件会产生此错误:
“不支持的16位应用程序
由于与64位版本的Windows不兼容,程序或功能“\ ?? \ path \ to \ exe”无法启动或运行。请与软件供应商联系,询问是否有64位Windows兼容版本。“(不兼容拼写错误是故意的,错误框拼写错误)
相同的错误,不同的exe(来自Google Images / 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;
}
其他可能很重要的信息:
WriteEmbeddedToDisk()
和RunExe()
属于类库B 答案 0 :(得分:1)
正在写入磁盘的文件是Windows Installer(.msi
)。我没有意识到MSI文件没有.exe
扩展名,因此将扩展程序更改为.msi
可解决此问题。