几年前,我刚刚写了一个老的程序,几年前,Vista发布。 Windows(7)给了我UAC提示,并要求运行它的权限。 我很惊讶,因为这是一个相对简单的程序,它不会做任何太花哨的事情,当然也不需要提升特权。 然后我检查了目录,果然,Windows正在覆盖程序上的盾牌图标。
我做了一个代码的快速扫描,没有看到任何明显会触发UAC提示的内容。 此外,该程序与我编写的其他几个程序共享一个框架,其中没有一个具有UAC要求。 有问题的程序以及其他不触发UAC提示的程序都存储在(FAT32)闪存驱动器的相同目录中。
这个程序与其他几乎完全相同的程序唯一不同的地方在于,它使用ShellExecute来允许用户启动默认的Web浏览器来打开选定的URL,但我无法想象如果/为什么实际上需要提升权限。
现在我试图find一些关于Windows使用什么样的启发式来确定它是否应该使用UAC提示的信息。 我知道,旧的安装程序通常会触发提示,但这些通常被称为setup.exe
或install.exe
,而这有一个相当无害的名称( udb.exe
)。 我怀疑它是检测某些函数调用或一些这样的(当然,这将意味着Windows资源pipe理器读取和反汇编似乎令人怀疑的所有可执行文件)。
我认为会有这方面的一些信息,但是我所做的研究只发现了一些非现场讨论(在上面或者右边的“类似问题”列表中没有提及),列举了一些原因,其中没有一个似乎适用:
我最终发现了一些相关的问题,比如问我自己的问题 ,但最终得到了一个完全不同的结果,在这里没有任何帮助,或者另外一个问题提出了类似但却相反的问题 。 不幸的是,我发现的最好的问题是关于安装程序/更新程序(这当然不适用于此),也没有帮助,因为答案只是我在其他网站上find的和上面列出的相同的旧信息。
有没有人知道UAC触发器列表或其他方式来弄清楚为什么Windows会认为某些程序需要提升? 是否有限制的API函数或什么东西的列表?
为了清楚起见,我正试图找出为什么Windows标记UAC的一个程序,而不是另一个类似的程序 。
搜索UAC heuristics
产生这个博客条目: 管理应用程序的标识 。 在该页面上:
O / S决定应用程序看起来像是一个安装程序或更新程序,并在用户运行时自动调用提升以运行具有管理权限/权限的程序。此决定基于启发式。 以下是一些启发式检测点,尽管这个列表并不详尽:
- 文件名检测 – 在文件名中查找“设置”,“更新”,“安装”等字样
- SxS清单字检测 – 在程序集名称属性程序的SxS清单中查找众所周知的值
- 字符串表检测 – 在可执行文件的资源部分的字符串表中查找众所周知的值
因此,Xearinox完全基于权限是不正确的。
您可能能够找出程序触发UAC提示的原因之一是使用进程监视器并检查权限错误。