如何在C++/Win32中禁用我的程序的程序兼容性助手?

3

1
你如何退出程序? - Daniel A. White
Windows使用启发式算法来判断一个为旧版Windows编写的应用程序是否尝试执行不再支持的操作。这在安装程序中尤其常见。如果不了解您的程序的更多信息,很难进行调试。 - Adrian McCarthy
我用 return 0; 完成了这个应用程序。 - Kar
1个回答

3

如果您看到这个对话框,可能有两种情况:

  1. 您的程序被检测为安装程序,Windows正在提供权限让您升级安装程序。这是启发式地由文件名检测到的,因此您无法更改此行为。如果您的程序文件名包含"setup"、"instal"(是的,只有一个"l")或其他几个词语,则会出现该对话框,但是您无法阻止它。
    编辑:显然有可能绕过这一限制...请参考评论。

  2. 或者,您可能正在调用某些已在当前Windows版本中弃用的API或者错误地调用某些API,从而触发了兼容性启发式。如果是这种情况,您需要找到触发启发式的程序位置。您可以使用应用兼容性工具包(ACT)来确定触发对话框的原因,如果我没记错的话。

没有办法只是“禁用”这个对话框--您必须首先修复触发它的问题才能使其消失。


如果是#1,那么如果您在清单中有一个requestedExecutionLevel标签,那么您将不会有问题。只有在没有清单或清单未指定requestedExecutionLevel时才应用启发式方法。 - Adrian McCarthy
@Adrian:您能否将实现步骤写成答案呢? - Billy ONeal
如何将requestedExecutionLevel添加到您的应用程序清单中的说明:http://msdn.microsoft.com/zh-cn/library/bb756929.aspx - Adrian McCarthy
@Adrian:我之所以要求你把那个放在答案中,主要是为了让我们可以点赞它 :) - Billy ONeal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接