Хорошо, причина , по которой это не работает, это модель безопасности в Windows Vista и новее. Учетная запись в группе администраторов по-прежнему выполняет все, что явно не повышен как ограниченный пользователь. Исключением является Administrator
учетная запись, которая запускает все с повышенными правами. По этой причине обычно считается плохим использование в качестве учетной записи и обычно отключено.
Вы можете включить его, а затем runas
вызвать как эту учетную запись. Это создает несколько проблем - теперь вы работаете в среде другого пользователя, в которой могут быть установлены разные переменные среды. 1
Лучшим способом сделать это было бы повышение уровня вашего текущего пользователя через UAC. К сожалению, стандартная командная строка не включает эту возможность - но это могут сделать как сторонние программы, так и встроенные PowerShell и WSHell (VBScript).
Исходя из моего другого ответа , вы можете вызвать команду PowerShell напрямую с помощью powershell -c
:
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 Примечание: это относится только к пользовательскому переменному окружению «s. Переменные окружения, которые вы установили в родительском процессе , не передаются UAC ! Это также относится к runas
, и это еще хуже там, потому что вы даже не получите правильные переменные пользователя.