У меня есть .CMD-файл, который я запускаю, щелкая правой кнопкой мыши по файлу в проводнике Windows; файл, на который я нажимаю, передается как параметр в.CMD файл. .CMD-файл выполняет некоторую обработку, а затем копирует файл из одной папки в другую. На Windows XP все работало нормально; в Windows 8 при запуске команды "copy" возвращается сообщение об ошибке "Доступ запрещен".

Если я копирую файл с помощью проводника Windows, появляется диалоговое окно с сообщением "Вам необходимо предоставить разрешение администратора для копирования в эту папку". Я нажимаю "Продолжить", и файл копируется.

Я не знаю деталей UAC, но я знаю, что я не хочу менять разрешения, чтобы разрешить копирование файла без вмешательства. То есть я не хочу всего.CMD файл для запуска от имени администратора. Я хочу щелкнуть правой кнопкой мыши по входному файлу, запустить.CMD файл, и диалоговое окно появляется, когда команда "copy" пытается выполнить; Затем я нажму "Продолжить", чтобы разрешить запуск только команды копирования с правами администратора. (Если бы было другое место в.Файл CMD, в который был скопирован файл, или любая другая операция, требующая прав администратора. Я бы хотел, чтобы снова появилось диалоговое окно с вопросом, можно ли запускать эту операцию от имени администратора).

Можно ли это сделать?

2 ответа2

2

Боюсь, нет простого решения того, что вы пытаетесь сделать.

  • cmd не очень интерактивен, и сценарии предназначены для запуска без участия человека.
  • еще одно ограничение заключается в том, как работает UAC: процесс может быть повышен только после его запуска; после запуска процесса он либо имеет права администратора, либо нет.
    Так что в вашем случае для каждой команды, которая может привести к приглашению UAC, вы должны кодировать оба пути: где у сценария есть разрешение на копирование без повышения прав и с повышением прав.

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


Если вы согласны с тем, как он работает в Windows XP, самое простое решение - запустить скрипт с правами администратора.

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


Вы можете создать ярлык, файл .lnk для своего скрипта. Затем в свойствах ярлыка на вкладке « Ярлык » нажмите кнопку « Дополнительно» и установите флажок « Запуск от имени администратора». Нажмите OK дважды, чтобы сохранить изменения.

Когда вы щелкнете по такому ярлыку, вы увидите приглашение UAC для командного процессора Windows (потому что он выполняет файлы .cmd ).

2

Вам нужно открыть командную строку от имени администратора.

  1. Откройте диспетчер задач, открыв диалоговое окно запуска (нажмите Win + R вместе) и напечатав taskmgr, или нажав Ctrl + Shift + Esc.

  2. Нажмите Файл -> Новая задача.

  3. Установите флажок « Создать эту задачу с правами администратора». Если вы этого не видите, это означает, что ваша учетная запись является стандартной, а не учетной записью администратора. Поскольку вы можете щелкнуть через приглашение UAC, я предполагаю, что вы администратор.

  4. Введите cmd и нажмите ОК. Вы должны быть в состоянии выполнить команду копирования из этой командной строки без получения каких-либо ошибок разрешения.

В качестве альтернативы, вы можете нажать Win + X, чтобы вызвать меню Power User, и выбрать

меню для опытных пользователей

и выберите Командную строку (Admin) оттуда (или нажмите A)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .