在兼容模式下运行时,windows对应用程序做了什么?
有没有一种方法可以检测.NET中的兼容模式设置?
用于公用Datatable的C#SQL查询
.Net的窗口菜单
命令和复合应用程序块中的事件之间的区别
.NET与windows RT蓝牙LE API – 重新启动windows后无法读取或写入设备
processstartinfo.UseShellExecute有什么大不了的?
在兼容模式下运行时,windows对应用程序做了什么?
它插入一些模仿旧行为或错误的兼容性垫片。 有时这是必要的,一些程序的行为取决于已经修复的旧错误; 或者他们使用未公开的功能。
Joel的博客文章“微软如何失去API战争”给出了一个很好的例子:
我首先从热门游戏“模拟城市”的开发者那里听说过这个消息,他告诉我,他的应用程序中存在一个严重的错误:在释放它之后使用了内存,这是一个在DOS上正常工作的主要禁忌,在windows下无法工作,释放的内存可能会被另一个正在运行的应用程序马上抢走。 windows团队的测试人员正在通过各种流行的应用程序,测试他们以确保他们的工作正常,但模拟城市不断崩溃。 他们向windows开发人员汇报了这一情况,他们反汇编了SimCity,在调试器中检查了这个BUG,发现了这个BUG,并添加了一些特殊的代码来检查SimCity是否在运行,如果是,运行内存分配器,释放它后仍然可以使用内存。
这就是兼容垫片所要做的。 插入传统行为。 无论是报告不同版本的windows, 以不同的方式使某个API行为; 或者禁用可能会导致Aero问题的windows的其他功能。
垫片的技术细节在这里 。
Shim基础设施实现了一种应用程序编程接口(API)挂钩形式。 具体来说,它利用链接的性质将来自windows本身的API调用重定向到替代代码 – 垫片本身。 windows可执行文件(PE)和通用目标文件格式(COFF)规范包含多个头文件,头文件中的数据目录在应用程序和链接文件之间提供了一个间接层。 通过导入地址表(IAT)调用外部二进制文件。
有没有一种方法可以检测.NET中的兼容模式设置?
问题是以兼容模式运行的程序似乎给出了相关的答案。
总结以上是内存溢出为你收集整理的如何在Windows中以兼容模式启动应用程序会影响应用程序,我该如何检测它?全部内容,希望文章能够帮你解决如何在Windows中以兼容模式启动应用程序会影响应用程序,我该如何检测它?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)