以兼容性运行这个程序哪里错了?

      P.S.话说有很多天很多天没有写东东了啊,因为实在太忙了,还是恢复至少一个月两篇的状态吧。

我们的程序有时候需要精确的判定当前运行在哪个系统下面,也就是说程序的某个功能可能需要知道当前运行在哪个真正的操作系统下,而操作系统提供了一个兼容模式功能,就是用户可以设置某个程序运行在某个模拟的更低的版本的操作系统下面,这是有好处的,因为某些程序在某些更高版本的操作系统下面可能发生兼容性问题而无法运行。在设置兼容模式运行后,程序里面调用ring3层的GetVersionEx得到的将是模拟的的操作系统版本,而不是真正的操作系统版本。

      2、如果有一个需求,在安装时,怎么设置一个程序运行在某个低版本的操作系统兼容模式下呢?

VISTASP2等等(不要在低版本的操作系统下兼容更高版本的操作系统,不会出问题,而是毫无意义,系统直接忽略)。有了这个就可以做到把某个程序写入兼容模式运行中。也可以保护这个注册表位置防止别人来使用兼容模式运行你的程序。

再看看第一个问题,研究下了微软实现兼容模式的原理,网上的资料很少,但是大概就是使用HOOK的原理,windows发现该程序需要进行兼容模式运行(通过查注册表啦,还有一些系统默认以兼容模式运行的程序,应该是记录在其他地方,没有深究),就会加载一些不同的系统DLL(在win32下一个应用程序想跑起来,是需要很多系统的DLL的)来进行程序的运行,大概情况如下,左边是非兼容模式运行时加载的一些DLL,右边是运行在兼容模式环境下后加载的一些DLL:

      这是否就给了我们一些思路?可以检测当前程序加载的模块,如果有这些AcGenral.dll之类的模块存在,就认为是运行在兼容模式下呢?这个我没有去试过,但是我觉得可行。o(∩_∩)o

另外一种方法是从原理是来绕过,GetVersionEx这个API来之kernel32.dll,而kernel32.dll又调用了ntdll.dll里面的RtlGetVersion这个函数,如果我们直接调用呢?试了下也是有一定可行性的。不过悲剧的是,这个方法在vista及以上系统就无效了,可能是因为微软在实现兼容模式时,hook得更加深了。

0);然后调用文件版本API,取出文件ntoskrnl.exe的版本号,譬如是5.1.,然后算出一个值52(5*10 + 1),对比前后两个值,如果不相等则认为自身运行在兼容模式下。具体分析可以见调试结果(call 0042980是去取ntoskrnl.exe是版本)。

}

来源:蒲公英系统┆发布时间: 09:27┆点击:

  Win10系统鲁大师无法运行怎么办?

  1、首先我们得明白这是我们系统和软件的兼容性问题,我们先按照上图的提示进入鲁大师的属性兼容性页面,然后去掉“兼容模式运行这个程序”的勾。如图:

  2、再我们重启电脑之后再进入无法运行的鲁大师,右键属性再到兼容模式,勾选“兼容模式运行这个程序”,之后将下面的系统设置为Win7或Winxp(自己估计吧),之后退出再运行鲁大师看看可不可以。

尚未注册畅言帐号,请到后台注册

}

  现在,很多用户都喜欢玩游戏,最近,有些用户在Win7电脑中运行红色警戒策略类游戏时提示“需要以兼容模式打开”,不仅如此,而且打开其他软件也弹出此提示。那么,在电脑中运行游戏或者打开程序时弹出上述提示该怎么来处理呢?

  1、选择你要运行的软件,右单击弹出快捷菜单中选择属性;

  2、打开软件属性对话窗口,选择”兼容性“选项卡;

  3、以兼容模式运行这个程序前面打钩;

  4、然后在众多模式中选择可兼容的模式如XP模式;

  5、还可以设置软件兼容的分辨率和256色运行,以管理员身份运行程序;

  6、最后确定保存,退出后双击软件打开即可。

  关于在电脑中运行游戏或者打开软件提示“需要以兼容模式打开”的处理方法小编就和大家介绍到这了,要是用户在电脑中玩游戏时也遇到同样问题话,不妨参考本文介绍的方法来处理。

}

我要回帖

更多关于 以兼容性运行这个程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信