Если вы активный пользователь командной строки под Windows, вам определённо пригодится крохотная утилита SU (Super User), которая позволяет запускать программы с повышенными привилегиями без необходимости ввода пароля администратора (но с появлением диалога UAC). По сути, это аналог функции «Run as administrator» из контекстного меню, но с одним важным различием: стандартный механизм устанавливает рабочий каталог c:\windows\system32\
, а SU сохраняет тот каталог, из которого он был запущен. То есть стандартными средствами нельзя запустить, например, сmd
в том каталоге, который у вас сейчас открыт в Total Commander, что очень неудобно. А в SU этот вопрос полностью решён.
Скачать: sucmd.7z (18КБ). Исходный код →
Для работы необходимо предварительно запустить install.cmd
, чтобы скопировать su32.exe
и su64.exe
под именем su.exe
в системные директории c:\windows\syswow64\
и c:\windows\system32\
соответственно, после чего утилита всегда будет готова к работе в консоли или по нажатию Win+R
.
Для того, чтобы запустить командную строку в текущем каталоге, например, при помощи Total Commander, необходимо просто ввести команду su
в соответствующее поле внизу экрана, нажать Enter и согласиться с выдачей приложению повышенных привилегий (Alt+Y
).
Для запуска любых сторонних команд с повышенными привилегиями необходимо указать их непосредственно после команды su
. Например, если вы находитесь в каталоге c:\windows\system32\drivers\etc\
и хотите открыть файл hosts в блокноте, просто выполните команду: su notepad hosts
.
Также не стоит забывать о быстром запуске командной строки при помощи диалога «Выполнить» (Win+R
). При этом командный интерпретатор будет запущен в каталоге пользователя, а не в системном каталоге.
История изменений
v1.2.2 [2024/12/06]
- Добавлен билд для ARM64 (su64a.exe).
- Подписаны все исполняемые файлы, чтобы избежать предупреждений от Windows (добавляет 16КБ каждому exe).
- Поднято ограничение на длину команды с 4096 символов до максимально возможного 32767.
v1.2.1 [2019/07/03]
- Добавлен билд для x86-64 (su64.exe).
v1.2.0 [2013/02/19]
- Первая публичная версия.
О, размер даже меньше чем https://winreview.ru/obnovlenie-ele-1-0-1-utility-dlya-eskalacii-privilegij-otkrytogo-okna-komandoj-stroki/
где было 8 кило. В нете можно найти похожее но размером больше 60 кило (если не под сотню). Осталось NTFS-сжатием до 4 кило сжать и норм.
Но и тут эта же проблема. Например, хочу сделать симв. ссылку в системной папке: вхожу в командную строку, cd %windir%, набираю mklink su.exe затем перетягиваю в командную строку этот файл, жму enter – "Отказано в доступе", перетягиваю этот файл в командную строку, потом после него подписываю mklink su.exe и снова перетягиваю файл с программой, жму Enter — Не удаётся найти указанный файл!
Ele.exe вообще молчит и симв. ссылку не создаёт. NircCmdC.exe elevatecmd хоть и запрашивает повышение, ссылка так и не создаётся. Короче, пришлось ещё дописывать cmd /k (что даже с nircmdc не прокатило).
А вообще мечтаю чтоб в запущенное от админа окно cmd можно было Drag'n'Drop'ать (как в NTFS Strem Explorer — запускаешь – требует повышение, однако файлы в его окно спокойно перетягиваются).
В случае с SU также не используется .NET Framework. Для такой задачи он не нужен.
4 килобайта можно в принципе достаточно легко было добиться, если пообъединять секции и стрипнуть релоки, но такой исполняемый файл будет веять лёгкой нестандартностью, хоть и на работоспособности это никак не скажется.
Не совсем понял вашу проблему — что именно вы пытались делать и каким образом.
Короче, вместо того, чтобы объяснять, что хочу сделать я, объясню, что делает этот SU`к: вместо того, чтобы запустить комманду, ищёт ФАЙЛ! т.е. mklink.exe, del.exe — но таких файлов в системе не существует, поэтому и ругается: The system cannot find the file specified.
А дописывать лишние буквы, чтоб ещё запускало командную строку "со следующей за ней командой", как-то лень.
Команды в стиле del встроены в cmd, программ с таким именем нет в system32. Если вы попробуете нажать Win+R и запустить там del, то оно тоже будет ругаться, что не может найти такую команду. Хотя соглашусь, что кто-то мог бы пожелать выполнять такие команды через su. Вопрос только в том, что в Windows сегодня встроен ещё и Powershell, поэтому я не уверен, стоит ли перенаправлять все команды в cmd. На самом деле, одна из первых версий su делала свои дела через cmd, и там команды типа del должны работать. Увы, уже не помню почему я отказался от этого подхода. Но спасибо на указанную проблему. Поразмыслю над этим, может быть вернусь к использованию cmd в качестве исполнителя команд.
Нашёл в своих заметках по SU. Я хотел предотвратить обработку всяких служебных символов промежуточным cmd, если пользователь пытается передать их в качестве параметра. Иначе в чём-то вроде
придётся всё экранировать дважды, чтобы оно сработало как ожидается. Тут конечно есть варианты, можно добавить какое-то автоэкранирование при передаче управления в промежуточный cmd... В общем есть над чем поразмыслить.
А SU "случайно не запустит" скрывающегося в текущей (рабочей) папке cmd.bat (где задействуется %1 %2 и т.д.)?
Уж для полной уверенности лучше %comspec%, ага, например, чтоб запустило какой-нибудь ConEmu вместо cmd…
Ой, ладно бы, если б последние его версии работали на домашних изданиях висты.
И тогда при net HelpMsg 2 надо как-то выяснять, из-под какой оболочки SU запускали. О, вот чёрт, тысячу проклятий consent.exe:
&Yes = ERRORLEVEL 0
&No = ERRORLEVEL 1223
Вот что этот посредник портит! Ваш SU повышает привелегии, и командная строка уже ждёт ответа от consent.exe, а не SU, а тот показывает эту ошибку уже в своём окне, вместо того, чтобы передать её обратно в командную строку! А elevate.exe (Kai Liu), 5120 байт (32-бит) и 6144 байт (64 бит) сразу уведомляет об отсутствии файла, не успев повысится, поэтому нужный ERRORLEVEL можно использовать для того, чтобы повторить то же, но уже в качестве команды! Ага! Угораздило же мне только сейчас америку открыть! Прога эта аж 2009-2011 гг.! Хорошо, что хоть ссылки на 7z-архивчик ещё действительные!
Exe-шки, так же, как и SU, легко жмутся NTFS-ом до стандартного размера кластера (т.е. оба файла займут всего 8 кб, не считая readme и исходников, ага, ВинЭбилити со своими двухсоткилобайтниыми Elevate.exe и рядом не стояли!). В общем, нашлось наконец-то адекватное решение, правда, нужно ещё создать пакетный файл в какой-нибудь из %path% (например в %windir%\e.cmd):
Да, топорный костыль – не умею я писать "красивые пакетные файлы"! Исправьте прямо в этом посте, вместе с этим комментом. Зато "отказанную в доступе" команду можно теперь выполнять "почти как su !!":
↑; Home; e; пробел.
Я думаю, вам будет интересно поколупайть исходники этого elevate (они всё равно в комплекте).
Вот блин! Мой же "топор" не то что RegSvr32, даже fsutil не рубит (последний, так и не создав, просто закрывает командную строку даже не отругнувшись)! Придётся постоянно использовать с ключом /k %1 %2 %3 %4…
Т.е. пришлось набирать в командной строке e notepad (и после enter`а командная строка закрылась) чтоб потом в блокноте открыть %windir%\e.cmd и оставить в это файле только последнюю строку, а запущенный с повышенными привелегиями блокнот мог сохранить этот файл по Ctrl+S. И после этого, каждый раз придётся вручную закрывать окно привилегированной командной строки, заодно прочитав, успешно или нет. И уже, введя e notepad, создаётся ещё и пустое окно командной строки с заголовком notepad :D
Насчёт "красивых пакетных файлов", хотелось бы сделать что-то наподобие их (подробнее тут…), но не требующих использование vbs-файлов, иначе говоря, использовать с такой "типа политикой" (не предусмотрено в gpedit.msc):