Показать полную графическую версию : Как открыть командную строку от имени администратора в нужной папке
Мы открываем командную строку, чтобы выполнить какую-либо команду. Когда программа или скрипт находятся за пределами известного системе расположения (они перечислены в переменной PATH), приходится вводить полный путь к ним. Запуск командной строки в нужной папке позволяет сэкономить время на вводе...http://feeds.feedburner.com/~r/outsidethebox/windows-7/~4/SdD_vCryjNo
Читать дальше в блоге... (http://feedproxy.google.com/~r/outsidethebox/windows-7/~3/SdD_vCryjNo/)
Это сообщение создано автоматически.
Самым быстрым способом был бы Drag & Drop в командную строку исполнительного файла, который требуется запустить. Но в Виста и Севен проделать данную манипуляцию с консолью, запушенного от имени другого пользователя, нельзя.
И как заявляли в свое время это By Design. Однако как оказалось для текущего пользователя всё же можно обойти, посредством утилит работающих по принципу "напечатать в консоли путь к файлу который передан мне в качестве первого параметре командной строки ". Другими словами: перетянув на ярлык/сам исполнительный файл такой утилиты любой файл получаем в запушенной ранее консоли его путь.
@echo off
SET FileName=SendToMyConsole
IF EXIST %FileName%.exe goto RunEXE
IF EXIST %FileName%.vb goto setNetVersion
echo Rem Start Code >%FileName%.vb
echo Imports System' >>%FileName%.vb
echo Imports System.Windows.Forms' >>%FileName%.vb
echo Imports System.Windows.Forms.SendKeys' >>%FileName%.vb
echo ' >>%FileName%.vb
echo Module Module1' >>%FileName%.vb
echo Private Declare Auto Function GetDesktopWindow Lib "user32.dll" () As IntPtr' >>%FileName%.vb
echo Declare Auto Function FindWindow Lib "USER32.DLL" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr' >>%FileName%.vb
echo Declare Auto Function SetForegroundWindow Lib "USER32.DLL" (ByVal hWnd As IntPtr) As Boolean' >>%FileName%.vb
echo Sub Main()' >>%FileName%.vb
echo Dim HWND As IntPtr = FindWindow("ConsoleWindowClass", vbNullString)' >>%FileName%.vb
echo If HWND ^<^> IntPtr.Zero Then' >>%FileName%.vb
echo Dim theForegroundWindow As Boolean = SetForegroundWindow(HWND)' >>%FileName%.vb
echo If theForegroundWindow = True Then' >>%FileName%.vb
echo SendWait(Command$())' >>%FileName%.vb
echo End If' >>%FileName%.vb
echo End If' >>%FileName%.vb
echo End Sub' >>%FileName%.vb
echo End Module' >>%FileName%.vb
echo ' >>%FileName%.vb
REM End VbCode
:setNetVersion
if exist %SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\vbc.exe goto net40
if exist %SYSTEMROOT%\Microsoft.NET\Framework\v3.5\vbc.exe goto net35
if exist %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\vbc.exe goto net20
echo Error: .NET Framework 4.0, 3.5, 3.0 or 2.0 required.
echo.
goto end
:net20
set VBC_PATH=%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727
goto compile
:net35
set VBC_PATH=%SYSTEMROOT%\Microsoft.NET\Framework\v3.5
goto compile
:net40
set VBC_PATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319
goto compile
:compile
%VBC_PATH%\vbc %FileName%.vb /target:winexe
:RunEXE
%FileName%.exe
:end
Но это косвенный Drag & Drop в консоль.
В связи с этим вступлением вопрос: если какие-то утилиты позволяющие организовать Drag & Drop в административную консоль?
Как мне видится этот запрет связан с вопросами безопасности (кстати, а много ли было прецедентов с этой возможностью?), возможно по вопросу запрета "взаимодействия сервисов с рабочим столом".
Стало быть утилита которая могла бы возвращать данную возможность наверное шла бы в комплекте с драйвером виртуальной клавиатуры, так как по другому к консоли "не допечататься".
Не попадалась ли такая?
Самым быстрым способом был бы Drag & Drop в командную строку исполнительного файла, который требуется запустить. »
Гм... чтобы имя подставлялось при этом? Ну так можно открыть консоль озвученным тут способом, ввести первые 1-2 буквы файла и TAB нажать. Это быстрее, чем отдельно открывать консоль от имени администратора, а потом таскать в нее файл.
кстати, а много ли было прецедентов с этой возможностью? »
Думаю, достаточно одного :)
Утилит не попадалось.
Morpheus
07-03-2011, 23:45
Drag&Drop в cmd начинает работать, если перезапустить explorer от имени админа.
Как мне представляется, это сильный удар по безопасности. Вы тоже так считаете? :)
Как мне представляется, это сильный удар по безопасности. Вы тоже так считаете? »
Нет, не считаю. Работу Drag&Drop при включенном UAC я объяснял в блоге (http://www.outsidethebox.ms/10841/#comment-323). Там говорится, что не происходит повышения прав при перетаскивании из программ, запущенных с обычными правами, в программы, которые запущены с полными правами. И неважно, консоль это или блокнот. Поэтому создается ощущение, что перетаскивание не работает.
если перезапустить explorer от имени админа »
то все программы, запускаемые из него, будут выполняться с полными правами. И зачем это нужно? С тем же успехом можно отключать UAC. В данном же случае обе программы (проводник и консоль) запущены с полными правами, следовательно перетаскивание работает.
Опять же, перетаскивание будет работать из проводника. Но если уже запущен другой файловый менеджер с обычными правами, в полноправную консоль ничего не перетащится.
Morpheus
08-03-2011, 01:03
то все программы, запускаемые из него, будут выполняться с полными правами. »
Не докрутил, спасибо!
С тем же успехом можно отключать UAC. »
Это и подозревалось, запуск проводника от админа практически пробивает такую же дыру в безопасности, как и отключение UAC.
И зачем это нужно? »
Не нужно.
Morpheus, мы уже много говорили на тему UAC в рамках опроса Включен ли у вас контроль учетных записей? (http://forum.oszone.net/thread-192895.html), так что я не буду повторяться. UAC - это не граница безопасности (защищенной зоны), потому что конечное решение принимает не система, а пользователь. Другое дело, что если UAC отключен, пользователь никогда не узнает, что вредоносное приложение запускается с полными правами.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC