在 Windows 7(在我的情况下是 64 位 Ultimate)中,有没有办法只获得管理员帐户的权限,而不是有效地“运行”该应用程序<insert administrator name here>
?
我很为难MPC一HC(Media Player Classic - 家庭影院),它需要管理员权限才能将文件与其关联。当我在那里输入管理员帐户的凭据时,它实际上会更新整个环境,因此设置仅适用于我提供的帐户,而不适用于我登录的标准帐户。需要说明的是,我首先在我的标准登录帐户下运行该应用程序,然后单击程序中可用的“以管理员身份运行”按钮。
我知道我也遇到过一些标准 Windows 控制小程序的相同问题,因此我认为这不是 MPC-HC 本身的问题。虽然我现在记不清具体是什么问题了,但我确信是这样的。
到目前为止,我能想到的唯一解决方法是将我的帐户暂时添加到管理员组,完成后再快速将其删除。但这感觉像是一种安全风险,而且也相当不方便,所以我真的希望有更好的解决方案……
答案1
人们倾向于认为 Windows 的 UAC 行为与sudo
Unix/Linux 环境中的行为相同,在 Unix/Linux 环境中,您通常没有特权的用户帐户明确执行特权操作。Microsoft 设计 UAC 的方式鼓励您这样想,但遗憾的是,事实并非如此。当 UAC 提示输入凭据时,它会执行隐式操作Run As...
,并使用您提供的凭据执行完整的用户上下文切换。执行特权操作的用户帐户不再是调用 UAC 提示的用户帐户。
在您的案例中,您说您正在尝试将文件类型与 MPC-HC 关联。这让我感到好奇,因为普通的非特权用户有权将文件类型与应用程序关联。如果您愿意,您可以自由地关联 .doc 文件以在记事本中打开,并且您的凭据不会受到质疑。这是因为 Windows 会根据每个用户保留一个文件关联列表,并且每个用户都可以修改自己的环境,以便在最大程度上不影响系统的其他用户。
工作原理如下:
通常,Windows 将文件关联存储在注册表中的HKEY_LOCAL_MACHINE\Software\Classes
。这是在系统的注册表配置单元中。那里的关联是全局的,会影响机器的每个用户。您需要提升权限才能修改其中的大部分数据。
如果用户覆盖关联(或创建新关联),Windows 会将其记录在 中HKEY_CURRENT_USER\Software\Classes
。这是用户的注册表配置单元。每个用户都有自己的 HKCU 配置单元,并有权自由修改自己的副本。
Windows 将两个配置单元合并为单个虚拟树HKEY_CLASSES_ROOT
,该树仅存在于内存中,而不是实际的注册表配置单元。当发生冲突时(即两个位置都记录了相同的关联),用户的副本优先。
现在,当您尝试更改文件关联并且 MPC-HC 提示您提供凭据时,这告诉我正在发生以下两件事之一:
任何一个
- MPC-HC 正在对 \Software\Classes 键进行更改,
HKEY_LOCAL_MACHINE
并且需要提升的凭据才能执行此操作。
或者
- MPC-HC 错误地提示输入凭证,因为它想必须如此,而开发人员不了解 UAC 的工作原理。您可能会惊讶于所谓的“聪明”人经常会犯这样的错误。
在第一种情况下,MPC-HC 成功更新了 HKLM 配置单元中的文件关联,但您的用户帐户已在 HKCU 配置单元中覆盖了它。这可以解释为什么它没有出现已经产生了影响。解决方法是从注册表中删除该关联。 笔记:如果您启动regedit
,您将收到 UAC 提示。 不要使用管理员帐户的凭据。如果这样做,您看到的 HKEY_CURRENT_USERS 配置单元将是管理员帐户的配置单元,而不是您的配置单元。请改用您自己的非特权帐户的凭据。它们将要工作。
在第二种情况下,MPC-HC 可能只是在更新关联,HKEY_CLASSES_ROOT
并且被硬编码为提示提升权限,因为 99% 的时间,它会重定向到HKLM
(需要提升权限)而不是HKCU
。 如果是这种情况,请尝试在 UAC 提示符下提供您自己的凭据,看看它是否能帮到您。