[很抱歉,这不是一个直接的编程问题。但我最近换了一台新的 Vista 机器,我在其中保持 UAC 启用(请不要告诉我禁用它,这不是一个选项)。]
每次我运行 gnu 的 patch.exe 时,我都会收到一个来自 Vista 的提升对话框。如果我将 patch.exe 重命名为 foo.exe,它不会执行此操作,因此我认为这是 Vista 的“启发式”之一。
有谁知道如何禁用此功能?这让我抓狂,谷歌也没有帮助。
或者我应该只为 patch.exe 添加一个清单来告诉系统不要尝试提升它?这行得通吗?如果行得通,你如何做出这样的体现?
非常感谢,到目前为止,我已经用头撞墙一个小时了。
问题是您的应用程序不包含带有请求的执行级别.
背景
所有正确编写的 Windows 应用程序都需要有程序集清单。从 2006 年开始,您需要具备的要素之一是请求的执行级别指定您的应用程序是否只能在用户是管理员的情况下运行。
如果您的应用程序没有程序集清单,或者没有请求的执行级别Windows 会假设它是legacy应用程序,并采取一些措施以使其保持运行。
遗留应用程序的一个兼容性问题是,其中一些可能是安装程序或更新程序,并且只能在以管理员身份运行时才能运行。 Windows 尝试通过文件名猜测这些应用程序:
是否所有文件名示例都被尝试自动提升的兼容性启发法捕获for用户。
如果应用程序没有程序集清单,则它不是有效编写的 Windows 应用程序。
正确的解决方案
正确的解决方案是添加所有正确的应用程序都将具有的程序集清单。这禁用了启发式方法。
示例 UAC“asInvoker”清单:
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)