Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 7 (http://forum.oszone.net/forumdisplay.php?f=95)
-   -   Как открыть командную строку от имени администратора в нужной папке (http://forum.oszone.net/showthread.php?t=192242)

Vadikan 25-11-2010 10:30 1551138

Как открыть командную строку от имени администратора в нужной папке
 
Мы открываем командную строку, чтобы выполнить какую-либо команду. Когда программа или скрипт находятся за пределами известного системе расположения (они перечислены в переменной PATH), приходится вводить полный путь к ним. Запуск командной строки в нужной папке позволяет сэкономить время на вводе...

Читать дальше в блоге...

Это сообщение создано автоматически.

Admiral 26-11-2010 17:41 1552195

Самым быстрым способом был бы 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 в административную консоль?
Как мне видится этот запрет связан с вопросами безопасности (кстати, а много ли было прецедентов с этой возможностью?), возможно по вопросу запрета "взаимодействия сервисов с рабочим столом".
Стало быть утилита которая могла бы возвращать данную возможность наверное шла бы в комплекте с драйвером виртуальной клавиатуры, так как по другому к консоли "не допечататься".
Не попадалась ли такая?

Vadikan 26-11-2010 23:10 1552405

Цитата:

Цитата Admiral
Самым быстрым способом был бы Drag & Drop в командную строку исполнительного файла, который требуется запустить. »

Гм... чтобы имя подставлялось при этом? Ну так можно открыть консоль озвученным тут способом, ввести первые 1-2 буквы файла и TAB нажать. Это быстрее, чем отдельно открывать консоль от имени администратора, а потом таскать в нее файл.

Цитата:

Цитата Admiral
кстати, а много ли было прецедентов с этой возможностью? »

Думаю, достаточно одного :)

Утилит не попадалось.

Morpheus 07-03-2011 23:45 1629594

Drag&Drop в cmd начинает работать, если перезапустить explorer от имени админа.

Как мне представляется, это сильный удар по безопасности. Вы тоже так считаете? :)

Vadikan 08-03-2011 00:51 1629645

Цитата:

Цитата Morpheus
Как мне представляется, это сильный удар по безопасности. Вы тоже так считаете? »

Нет, не считаю. Работу Drag&Drop при включенном UAC я объяснял в блоге. Там говорится, что не происходит повышения прав при перетаскивании из программ, запущенных с обычными правами, в программы, которые запущены с полными правами. И неважно, консоль это или блокнот. Поэтому создается ощущение, что перетаскивание не работает.

Цитата:

Цитата Morpheus
если перезапустить explorer от имени админа »

то все программы, запускаемые из него, будут выполняться с полными правами. И зачем это нужно? С тем же успехом можно отключать UAC. В данном же случае обе программы (проводник и консоль) запущены с полными правами, следовательно перетаскивание работает.

Опять же, перетаскивание будет работать из проводника. Но если уже запущен другой файловый менеджер с обычными правами, в полноправную консоль ничего не перетащится.

Morpheus 08-03-2011 01:03 1629656

Цитата:

Цитата Vadikan
то все программы, запускаемые из него, будут выполняться с полными правами. »

Не докрутил, спасибо!
Цитата:

Цитата Vadikan
С тем же успехом можно отключать UAC. »

Это и подозревалось, запуск проводника от админа практически пробивает такую же дыру в безопасности, как и отключение UAC.
Цитата:

Цитата Vadikan
И зачем это нужно? »

Не нужно.

Vadikan 08-03-2011 01:08 1629659

Morpheus, мы уже много говорили на тему UAC в рамках опроса Включен ли у вас контроль учетных записей?, так что я не буду повторяться. UAC - это не граница безопасности (защищенной зоны), потому что конечное решение принимает не система, а пользователь. Другое дело, что если UAC отключен, пользователь никогда не узнает, что вредоносное приложение запускается с полными правами.


Время: 00:38.

Время: 00:38.
© OSzone.net 2001-