从 Explorer 和 cmd.exe 生成之间的 Windows 权限差异

从 Explorer 和 cmd.exe 生成之间的 Windows 权限差异

我注意到在 Windows 10 上运行安装程序时出现了一种奇怪的行为,我无法理解。安装程序会创建一个目录结构,并在某个时候重命名它创建的子目录之一。发生的事情解释如下:

  1. 当我在 Windows 资源管理器中单击鼠标右键setup.exe并选择“以管理员身份运行”时,安装最终失败,因为尝试重命名子目录时出现权限问题。

  2. 当我右键单击cmd.exe,以管理员身份运行它并setup.exe从命令行生成时,安装已成功完成。

这是怎么回事?以管理员身份从 Windows 资源管理器生成应用程序与以cmd.exe管理员身份生成应用程序之间有什么区别?

谢谢。

编辑

  • 安装程序创建的根目录为c:\personal。初始子目录的路径为:c:\personal\platform\db,重命名后的子目录应为:c:\personal\platform\database

  • 运行安装程序的用户帐户属于管理员组,并且在两种情况下安装程序过程所有者都是该用户。

答案1

Windows 管理员帐户在 Windows 中拥有广泛的权限;但是,它们所能做的事情仍然有限。例如,只要文件归受信任的安装程序所有,Windows 管理员帐户就缺乏修改 System 32 文件夹中的文件所需的权限。管理员确实有权获得文件的所有权,然后授予他们修改文件的权限,但如果没有文件的所有权,他们就无法这样做。

另一方面,当您启动管理员命令提示符时,从该 cmd.exe 实例中启动的命令或服务不会以 Windows 管理员权限运行。相反,它们以系统权限运行(请注意,管理员命令提示符默认在 System 32 文件夹中启动)。系统权限与管理员权限非常相似,主要区别在于系统权限可以绕过某些限制。在另一个线程中,它指出:

一个实际的区别是,如果计算机加入域,则以 SYSTEM 身份运行的进程可以在计算机域帐户的上下文中访问域服务器。以管理员身份运行的进程无权访问域计算机,除非密码恰好匹配或明确提供了其他凭据。

值得注意的是,系统并不是一个您可以登录的帐户,它只是一组权限或操作系统作为用户的抽象概念。

答案2

我认为这与“开始于”参数有关。安装程序可能使用相对路径,当您双击启动安装文件时,“开始于”参数是安装文件的路径。但是,如果您从 cmd 运行该安装文件,“开始于”参数与安装文件的路径不同。

答案3

这就是我对您所描述的案例的分析。

Windows Explorer 的编程很奇怪,即使打开了多个 Explorer 窗口,也始终只有一个explorer.exe实例,并且即使登录帐户是管理员,它也会在以标准用户身份登录时启动。这意味着 Explorer 永远不会以提升模式运行,并且通过 Explorer 启动的任何进程都会继承此运行模式。如果启动的进程想要获得管理员权限,它必须请求提升,因此需要用户批准(如果启用了 UAC)。

另一方面,如果一个进程从提升的权限启动cmd.exe,它会继承此运行模式,因此它不需要请求提升权限(如果需要,则会立即“授予”权限,而无需 UAC 提示)。

现在,我过去曾多次从 Explorer 启动安装程序,它们总是请求提升权限并且运行正常。为了确保事实,我从命令行cmd.exe和 Explorer 以管理员身份启动了提升权限的程序,并使用以下方法比较了它们的权限: 进程探索器。两种情况下的所有权限完全相同。

这意味着,如果您使用的安装程序是正确编写的,它就不会有问题。不可避免的结论是,它的编程很糟糕,很奇怪。它发现有必要重命名自己的文件夹,这已经表明确实存在一些奇怪的事情。我猜它是由一个程序员创建的,然后被另一个不敢修改原始代码的程序员添加进去,只是在其中添加了更多的东西。

我试图想象什么样的错误会导致这样的问题,我只发现了以下内容,您可以使用 Process Explorer 作为工具,通过观察安装的运行情况来验证它。

  • 安装不是一个进程,这意味着初始设置启动了多个进程。可能并非所有这些进程都请求了提升权限。

  • 该文件夹是故意创建的,具有禁止非管理员修改的权限,并且重命名是由未提升权限的调用重命名进程尝试的(如果从已提升权限的进程启动,则该进程会被提升权限)。您可以通过在资源管理器中右键单击文件夹,选择“属性”,然后检查“安全”选项卡来验证这一点。

  • 当文件夹仍由另一个提升的进程打开时,一个未提升的进程尝试重命名,因此无法重命名。

这些并不是唯一的可能性——编程错误的可能性是无限的。只有在安装过程中仔细观察才能完全理解问题所在。

相关内容