При запуске простого командного файла (.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 - Не работает!
Имеет смысл, правда? :) Ошибка винды ...