下面的代码创建应用程序的副本并向副本添加资源。当您运行其中包含资源的副本时,它首先完成它的工作。但是当它退出时,它会以 Program Compatibility Assistant 错误退出:
图片来自谷歌。
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
public static extern IntPtr BeginUpdateResource([MarshalAs(UnmanagedType.LPStr)] string filename, bool deleteExistingResources);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool UpdateResource(IntPtr resource, [MarshalAs(UnmanagedType.LPStr)] string type, [MarshalAs(UnmanagedType.LPStr)] string name, ushort language, IntPtr data, uint dataSize);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool EndUpdateResource(IntPtr resource, bool discardChanges);
private static void modifyResources(string filename)
{
IntPtr handle = BeginUpdateResource(filename, true);
UpdateResource(handle, "10", "1", 0, Marshal.StringToHGlobalAnsi("hello world"), (uint) 11);
EndUpdateResource(handle, false);
}
static void Main(string[] args)
{
string exeFilename = Process.GetCurrentProcess().MainModule.FileName;
string filename = Path.GetFileName(exeFilename);
string anotherFilename = exeFilename.Replace(filename, "_" + filename);
File.Copy(exeFilename, anotherFilename, true);
modifyResources(anotherFilename);
}
}
我不明白。我会犯什么错误?
更多信息:Win 7 64x,应用程序 86x
注释 (其中一些让我认为错误消失了):
- 也许清理导入的库可能会有所帮助
- 可能是 Assemblyname 或命名空间
- 兼容性助手似乎检查了太多,并认为当程序执行的操作与助手预期的不同时出现问题。
项目作为单个 exe,没有额外的 dll(因为熄灭了我的额外 dll,没有发生错误)
绝对:错误与运行代码无关(空主方法)
- 绝对:错误与文件名有关