[对不起,这不是一个直接的编程问题.但我最近切换到一台新的Vista机器,我保持启用UAC(请不要告诉我禁用它,它不是一个选项).
每次运行gnu的patch.exe时,我都会从Vista获得一个提升对话框.如果我将patch.exe重命名为foo.exe它不会这样做,所以我认为这是Vista的"启发式"之一.
有谁知道如何禁用它?这让我疯狂,谷歌没有帮助.
或者我应该为patch.exe添加一个清单,告诉系统不要试图提升这个?这会起作用,如果是这样,你怎么做出这样的表现?
非常感谢,到目前为止,我一直在墙上撞了一个小时.
来自:http:
//social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/bf4f7dfa-5553-41d3-9c8e-311ee4a88599/
如果您可以向受影响的可执行文件添加清单,声明'asInvoker'的requestedExecutionLevel,它应该停止提示.
关于UAC架构和转换现有应用程序的相关指南,以便它们正常工作(靠近页面的底部五分之一):
http://technet.microsoft.com/en-us/library/cc709628.aspx
最后,如何编写这样的清单:
http://www.google.com/search?q=writing+a+uac+manifest
-亚当
问题是您的应用程序不包含带有requestedExectutionLevel的程序集清单.
所有正确编写的Windows应用程序都需要具有程序集清单.从2006年开始,您需要拥有的一个元素是requestedExecutionLevel,它指定您的应用程序是否只能在用户是管理员时才能运行.
如果您的应用程序没有程序集清单,或者它没有requestedExecutionLevel,则 Windows会认为它是遗留应用程序,并且可以做一些事情来保证它继续运行.
遗留应用程序的一个兼容性问题是它们中的一些可能是安装程序或udpater,并且只能在以管理员身份运行时才能运行.Windows尝试通过文件名猜测这些应用程序:
建立
更新
补丁
是否所有文件名都是由兼容性启发式捕获的,试图为用户自动提升.
如果应用程序没有程序集清单,则它不是有效编写的Windows应用程序.
正确的解决方案是添加所有正确的应用程序将具有的程序集清单.这禁用了启发式方法.
示例UAC"asInvoker"清单: