«Доступ запрещен», когда файл .CMD пытается скопировать файл

0

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

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

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

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

user184411
источник

Ответы:

2

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

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

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


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

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


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

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

Алексей Иванов
источник
Я снова отредактировал вопрос, пытаясь прояснить ситуацию, если кто-нибудь сможет помочь; но @ Алексей Иванов: Я думаю, вы дали понять, что то, что я хочу сделать, не может быть сделано. Я попробую ярлык (файл .lnk). Благодарю.
user184411 22.09.13
Ярлык не работал; Я попробую судовин.
user184411 22.09.13
@ user184411 Как не работал ярлык?
Алексей Иванов
@ Алексей Иванов: Я скажу тебе, когда вернусь к своему компьютеру в начале октября.
user184411 24.09.13
2

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

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

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

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

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

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

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

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

Джон Бенсин
источник
Я отредактировал вопрос и добавил некоторые подробности, чтобы показать, почему это не тот ответ, который я ищу.
user184411 19.09.13
1
@ user184411 Похоже, вам нужен командный файл. Поместите команду копирования в командный файл, затем запустите ее от имени администратора.
Джон Бенсин