Назад | Перейти на главную страницу

Файл CMD просто мигает при запуске от имени администратора

При запуске простого командного файла (.cmd) от имени администратора (щелчок правой кнопкой мыши -> Запуск от имени администратора) он просто мигает на панели задач, и больше ничего не происходит.

Запуск файла простым двойным щелчком по нему работает нормально.

Общее содержимое файла .cmd:

@echo off
set /p DUMMY=Done executing...

Нет журналов в средстве просмотра событий или сообщений об ошибках, которые я нашел ... Есть идеи, что попробовать?

Такие символы, как пробел, амперсанд, конвейер и т. Д., Имеют особое значение в командной строке Windows и должны быть сбежал. Щелкните правой кнопкой мыши Запустить от имени администратора действие может быть определено для конкретного исполняемый файл тип файла (расширение в PATHEXT переменная) в соответствующих разделах реестра - например, в HKEY_CLASSES_ROOT\cmdfile и HKEY_CLASSES_ROOT\batfile для Windows cmd скрипты:

assoc .cmd & assoc .bat
.cmd=cmdfile
.bat=batfile

Щелкните правой кнопкой мыши Запустить от имени администратора действия для этих типов файлов изначально определяется следующим образом:

reg query "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command"
reg query "HKEY_CLASSES_ROOT\batfile\Shell\runas\command"
HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command
    (Default)    REG_EXPAND_SZ    %SystemRoot%\System32\cmd.exe /C "%1" %*

HKEY_CLASSES_ROOT\batfile\Shell\runas\command
    (Default)    REG_EXPAND_SZ    %SystemRoot%\System32\cmd.exe /C "%1" %*

К сожалению, двойные кавычки удалены (см. cmd /?):

Если /C или /K указано, то оставшаяся часть командной строки после переключателя обрабатывается как командная строка, где для обработки цитаты (") персонажи:

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

Следовательно, вместо этого нам нужно вызвать следующую команду:

%SystemRoot%\System32\cmd.exe /C ""%1" %*"
rem                              ↑       ↑

Для этого откройте повышенный командную строку и выполните следующие команды (запустите reg add команда для batfile также, mutatis mutandis):

set auxvar=^%SystemRoot^%\System32\cmd.exe
reg add "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "%auxvar% /C \"\"%1\" %*\"" /f
The operation completed successfully.
reg query "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command"
HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command
    (Default)    REG_EXPAND_SZ    %SystemRoot%\System32\cmd.exe /C ""%1" %*"

Если вы предпочитаете делать это из .bat или .cmd сценарий, затем reg add команда должна читаться следующим образом:

reg add "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "%%SystemRoot%%\System32\cmd.exe /C \"\"%%1\" %%*\"" /f

Это из-за пути, в котором находится файл. Путь не может содержать знак "&", а также комбинация "@" и пробела тоже не работает:

C: /temp/test.cmd - Работает!

C: /temp&/test.cmd - Не работает!

C: / temp & / test.cmd - Не работает!

C: /temp@/test.cmd - Работает!

C: / temp @ / test.cmd - Не работает!

Имеет смысл, правда? :) Ошибка винды ...