好的,这不起作用的原因是Windows Vista和更高版本中的安全模型。管理员组中的帐户仍然可以运行未明确提升为受限用户权限的所有内容。该Administrator
帐户是例外,该帐户运行所有提升权限的帐户。由于这个原因,通常认为它不能用作您的登录帐户,并且通常被禁用。
您可以启用它,然后runas
以该帐户身份调用。这就带来了一些问题-现在您正在使用其他用户的环境运行,该环境可能设置了不同的环境变量。1个
更好的方法实际上是通过UAC提升您当前的用户身份。不幸的是,标准命令提示符不包含该功能-但是第三方程序和内置的PowerShell和WSHell(VBScript)都可以这样做。
借用我的其他答案,您可以直接使用powershell -c
以下命令调用PowerShell命令:
powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts
它基本上告诉PowerShell运行以下命令(start
别名为Start-Process
):
Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts
这里的窍门是传递动词runas
,触发UAC。
无论是Start-Process -Verb runas
也不是标准的CMD runas
将通过当前的工作目录,所以一直使用的完整路径在你以这种方式提升的任何命令。
另请注意,某些参数-c
可能与Start-Process
参数冲突,因此最安全的方法是:
powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"
1注意:这仅适用于用户的环境变量。您在父进程中设置的环境变量不会被UAC传递!这也适用于runas
,甚至更糟,因为您甚至无法获得正确的用户var。