我注意到,在使用pip
全局安装软件包时,安装失败,并出现权限不足错误。pip
以管理员身份运行时,问题已解决,并且pip
能够写入我的Program Files
目录。在编辑文本文件时也会出现同样的行为Program Files
——只有当我以管理员身份运行文本编辑器时,它才会起作用。
Program Files
但是,据我所知,我从未以管理员身份运行过任何安装程序,但它们都在没有任何提示的情况下写入我的目录。是什么让这些安装程序绕过了安全检查?
(我确实禁用了 UAC,但如果这是原因,那么为什么pip
其他常规程序(如文本编辑器)无法写入Program Files
目录?)
答案1
当 UAC 滑块完全向下时,请求提升权限的程序将自动获得批准。这与所有程序始终被提升权限不同(这实际上是如果您完全禁用 UAC,这会破坏一切)。
程序可以在其显现。大多数程序运行asInvoker
在与调用进程相同的级别。有些程序(如注册表编辑器和 MMC)要求以权限运行highestAvailable
,因此在启用 UAC 的情况下,管理员会收到提升提示,但普通用户不会收到。其他程序(如大多数安装程序)在没有提升的情况下完全无用,因此requireAdministrator
。这就是安装程序自动为您提升的原因。显然,pip
并不表现为需要提升。“你得不到,因为你不问。”
附加演示:从命令行启动提升权限的程序的一种方法是使用 PowerShell 的Start-Process
,-Verb runas
如下所示:
Start-Process cmd -Verb runas
在 UAC 开启的情况下,运行该程序将为您提供命令提示符的提升提示。将 UAC 降低到 UI 允许的最低限度后,您将获得提升的命令提示符,而没有 UAC 对话框。(您可以在命令窗口的标题栏中看到差异。)如果-Verb runas
关闭该程序,您将只获得正常的命令提示符。