写入磁盘后可执行文件损坏
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;
}
其他可能重要的信息:
- 可执行文件在 Class 库 A
WriteEmbeddedToDisk()
和RunExe()
在Class库Bclass中同一个class
- 通过同一进程将不同的可执行文件写入磁盘时发生了同样的错误。该可执行文件也在 Class 库 A 中。
正在写入磁盘的文件是 Windows 安装程序 (.msi
)。我没有意识到 MSI 文件不能有 .exe
扩展名,所以将扩展名更改为 .msi
解决了这个问题。
我在 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;
}
其他可能重要的信息:
- 可执行文件在 Class 库 A
WriteEmbeddedToDisk()
和RunExe()
在Class库Bclass中同一个class- 通过同一进程将不同的可执行文件写入磁盘时发生了同样的错误。该可执行文件也在 Class 库 A 中。
正在写入磁盘的文件是 Windows 安装程序 (.msi
)。我没有意识到 MSI 文件不能有 .exe
扩展名,所以将扩展名更改为 .msi
解决了这个问题。