问题是您的应用程序不包含带有requestedExectutionLevel的程序集清单。
背景
所有正确编写的 Windows 应用程序都必须具有程序集清单。从 2006 年开始,您需要具备的元素之一是requestedExecutionLevel,它指定您的应用程序是否只有在用户是管理员时才能运行。
如果您的应用程序没有程序集清单,或者它没有请求的执行级别, Windows 将假定它是一个遗留应用程序,并做一些事情来保持它运行。
遗留应用程序的一个兼容性问题是其中一些可能是安装程序或 udpater,并且只能在以管理员身份运行时运行。Windows 尝试通过文件名来猜测这些应用程序:
是否所有文件名示例都被试图自动提升用户的兼容性启发式捕获。
如果应用程序没有程序集清单,则它不是一个有效编写的 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>