下面的代码创建应用程序的副本并向副本添加资源。当您运行其中包含资源的副本时,它首先完成它的工作。但是当它退出时,它会以 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,没有发生错误) 
- 绝对:错误与运行代码无关(空主方法) 
- 绝对:错误与文件名有关