我刚刚运行了一个我几年前编写的旧程序,比Vista发布还要早几年。Windows(7)给我显示了UAC提示,并要求我授权运行它。这让我很惊讶,因为这是一个相对简单的程序,没有任何花哨的东西,当然也没有需要提升权限的内容。然后我检查了目录,发现Windows正在该程序上覆盖盾牌图标。
我快速扫描了代码,没有看到任何明显触发UAC提示的地方。此外,该程序与我编写的其他几个程序共享一个框架,其中没有一个需要UAC权限。问题所在的程序以及其他不会触发UAC提示的程序都存储在同一个目录下,位于(FAT32)闪存驱动器上。
唯一真正与其他几乎相同的程序不同的地方是,它使用ShellExecute允许用户启动默认的Web浏览器来打开选定的URL,但我无法想象为什么会需要提升权限。
现在我正在尝试找到关于Windows如何确定何时使用UAC提示的启发式信息。我知道旧的安装程序通常会触发提示,但这些通常称为
我认为应该存在一些关于此内容的信息,但我所做的研究只发现了一些离题的讨论(上面或右侧的“类似问题”列表中没有提到),其中列出了一些原因,但都不适用:
- 程序的特定请求(在UAC出现之前写成的程序显然不可能), - 缺少清单(它确实有一个,也无法解释为什么其他程序不会触发它) - 文件名/路径的内部列表(这里不适用) - 源代码(同样,这并不能解释其他程序为什么可以正常运行) - 访问受限文件/注册表键(这里也不适用) - 资源条目(再次,其他程序共享相同的资源数据) - 其他与系统相关的活动(同样,对于这个程序也不适用)
我最终找到了一些相关的问题,如一个询问和我一样的问题,但那个问题得出了完全不同的结果,对这里没有帮助,还有一个类似但相反的问题,同样没有帮助。不幸的是,我找到的最佳问题是关于安装程序/更新程序的(当然,这里并不适用),而且也没有帮助,因为答案只是我在其他网站上找到的旧信息,如上所述。
我快速扫描了代码,没有看到任何明显触发UAC提示的地方。此外,该程序与我编写的其他几个程序共享一个框架,其中没有一个需要UAC权限。问题所在的程序以及其他不会触发UAC提示的程序都存储在同一个目录下,位于(FAT32)闪存驱动器上。
唯一真正与其他几乎相同的程序不同的地方是,它使用ShellExecute允许用户启动默认的Web浏览器来打开选定的URL,但我无法想象为什么会需要提升权限。
现在我正在尝试找到关于Windows如何确定何时使用UAC提示的启发式信息。我知道旧的安装程序通常会触发提示,但这些通常称为
setup.exe
或install.exe
,而此程序具有非常无害的名称(udb.exe
)。我怀疑它是检测某些函数调用或类似的东西(当然,这意味着Windows Explorer读取并反汇编所有可执行文件,这似乎是不可行的)。我认为应该存在一些关于此内容的信息,但我所做的研究只发现了一些离题的讨论(上面或右侧的“类似问题”列表中没有提到),其中列出了一些原因,但都不适用:
- 程序的特定请求(在UAC出现之前写成的程序显然不可能), - 缺少清单(它确实有一个,也无法解释为什么其他程序不会触发它) - 文件名/路径的内部列表(这里不适用) - 源代码(同样,这并不能解释其他程序为什么可以正常运行) - 访问受限文件/注册表键(这里也不适用) - 资源条目(再次,其他程序共享相同的资源数据) - 其他与系统相关的活动(同样,对于这个程序也不适用)
我最终找到了一些相关的问题,如一个询问和我一样的问题,但那个问题得出了完全不同的结果,对这里没有帮助,还有一个类似但相反的问题,同样没有帮助。不幸的是,我找到的最佳问题是关于安装程序/更新程序的(当然,这里并不适用),而且也没有帮助,因为答案只是我在其他网站上找到的旧信息,如上所述。
有没有人知道UAC触发器的列表或其他方法来确定为什么Windows会认为某些程序需要提升权限?是否有受限API函数的列表或类似的东西?
明确一下,我正在尝试找出为什么Windows会为一个程序设置UAC,但不会为另一个类似的程序设置。
setup.exe
。这与权限有什么关系呢? - Synetech