Super User CMD v1.2.1 [2019/07/03] — запуск программ с повышением привилегий через UAC из командной строки под Windows

Если вы активный пользователь командной строки под Windows, вам определённо пригодится крохотная утилита SU (Super User), которая позволяет запускать программы с повышенными привилегиями без необходимости ввода пароля администратора (но с появлением диалога UAC). По сути, это аналог функции «Run as administrator» из контекстного меню, но с одним важным различием: стандартный механизм устанавливает рабочий каталог c:\windows\system32\, а SU сохраняет тот каталог, из которого он был запущен. То есть стандартными средствами нельзя запустить, например, сmd в том каталоге, который у вас сейчас открыт в Total Commander, что очень неудобно. А в SU этот вопрос полностью решён.

Скачать: sucmd.zip (7КБ). Исходный код →

Для работы необходимо предварительно запустить 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.1 [2019/07/03]

  • 64-разрядная версия
  • Даже не пытается запускаться на Windows старее Vista (в любом случае, оно не работало)
  • Меньший исполняемый файл (так как неработающая совместимость с XP была удалена)

v1.2.0 [2013/02/19]

  • Первая публичная версия
  • Использует сам себя в качестве посредника

v1.0.0 [2013/02/18]

  • Использует cmd в качестве посредника
  1. #1
    «G~Lí†ch»

    О, размер даже меньше чем 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 — запускаешь – требует повышение, однако файлы в его окно спокойно перетягиваются).

  2. #2
    VEG Автор

    В случае с SU также не используется .NET Framework. Для такой задачи он не нужен.

    4 килобайта можно в принципе достаточно легко было добиться, если пообъединять секции и стрипнуть релоки, но такой исполняемый файл будет веять лёгкой нестандартностью, хоть и на работоспособности это никак не скажется.

    Не совсем понял вашу проблему — что именно вы пытались делать и каким образом.

  3. #3
    «G~Lí†ch»

    Короче, вместо того, чтобы объяснять, что хочу сделать я, объясню, что делает этот SU`к: вместо того, чтобы запустить комманду, ищёт ФАЙЛ! т.е. mklink.exe, del.exe — но таких файлов в системе не существует, поэтому и ругается: The system cannot find the file specified.
    А дописывать лишние буквы, чтоб ещё запускало командную строку "со следующей за ней командой", как-то лень.

  4. #4
    VEG Автор

    Команды в стиле del встроены в cmd, программ с таким именем нет в system32. Если вы попробуете нажать Win+R и запустить там del, то оно тоже будет ругаться, что не может найти такую команду. Хотя соглашусь, что кто-то мог бы пожелать выполнять такие команды через su. Вопрос только в том, что в Windows сегодня встроен ещё и Powershell, поэтому я не уверен, стоит ли перенаправлять все команды в cmd. На самом деле, одна из первых версий su делала свои дела через cmd, и там команды типа del должны работать. Увы, уже не помню почему я отказался от этого подхода. Но спасибо на указанную проблему. Поразмыслю над этим, может быть вернусь к использованию cmd в качестве исполнителя команд.

  5. #5
    VEG Автор

    Нашёл в своих заметках по SU. Я хотел предотвратить обработку всяких служебных символов промежуточным cmd, если пользователь пытается передать их в качестве параметра. Иначе в чём-то вроде

    su cmd /C copy /B /-Y su32.exe "%WINDIR%\system32\su.exe" ^&^& pause

    придётся всё экранировать дважды, чтобы оно сработало как ожидается. Тут конечно есть варианты, можно добавить какое-то автоэкранирование при передаче управления в промежуточный cmd... В общем есть над чем поразмыслить.