Что происходит, когда я запускаю программу от имени администратора?

Что происходит, когда я запускаю программу от имени администратора?

Я пытаюсь запустить Win7 exe, который находится на сетевом ресурсе (сервер Linux CIFS). Ресурс был создан не администратором (см.Проблема Windows 7 с доступом к общей папке). Я могу читать, редактировать и записывать файлы в папке, содержащей exe. Я могу читать (т. е. копировать) exe.

Но когда я пытаюсьбегатьexe, либо дважды щелкнув и нажав «ОК» в диалоговом окне UAC, либо щелкнув правой кнопкой мыши «Запуск от имени администратора», я получаю:

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.

Нужно ли мне копировать exe-файл на локальный диск перед его запуском?

Я следовал рецепту (еще не принятый ответ)Как запустить EXE-файл из сетевого ресурса?, но, похоже, это дает только разрешения на чтение, а не на выполнение exe-файла.

(Отдалённо связано:Невозможно запустить .exe с сетевого диска.)

решение1

Это ожидаемое (хотя и необычное) поведение.

Запустить программу из сетевого ресурса можно несколькими способами.

  1. Общий ресурс подключен к сетевому диску: например g:->\\server\share
  2. Доступ к общему ресурсу осуществляется напрямую через общий ресурс:\\server\share

Первая проблема может возникнуть уже при запуске программы от имени администратора, и я объясню это ниже.

Что происходит, когда я запускаю программу от имени администратора?

Когда вы запускаете программу как администратор, создается новая среда и загружается профиль для Администратора. Хотя он будет использовать права, имеющиеся у вашего пользователя, он, очевидно, имеет дополнительные права для пользователя-администратора. Как следствие, никакие сопоставления с сетевым диском не создаются, и, таким образом, ваш пользователь-Администратор не имеет никаких дополнительных сетевых сопоставлений в своем профиле, поэтому g: не существует.

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

Как устранить и преодолеть проблему?

Конечно, вы можете просто скопировать файл локально и запустить его, но предположим, что вы не хотите этого делать.

Сначала вы можете запустить командную строку от имени администратора. Оттуда введите следующую команду:

net use g: \\server\share

Замените диск и общий ресурс так, чтобы они соответствовали существующему общему ресурсу.

Пока открыто это окно командной строки, вы можете запустить исполняемый файл от имени администратора, и он гарантированно будет работать.

Если у вашего пользователя нет прав на \\server\share, net use завершится с ошибкой, сообщающей именно об этом, так что вы будете знать, в чем проблема.

Если права в порядке, вы можете альтернативно получить доступ к исполняемому файлу, перейдя \\server\shareи запустив исполняемый файл как администратор. Это устраняет необходимость иметь сначала сетевой ресурс в другой среде.

решение2

Вам необходимо установить значение EnableLinkedConnections равным 1, как описано в этой статье базы знаний:

Подключенные диски недоступны из запроса с повышенными привилегиями, если в Windows для UAC задан параметр «Запрашивать учетные данные»
https://support.microsoft.com/en-us/kb/3035277

  1. В редакторе реестра найдите и щелкните следующий подраздел реестра:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

  2. На правой панели щелкните правой кнопкой мыши пункт «Создать», а затем щелкните «Параметр DWORD (32 бита)».

  3. Назовите новую запись реестра как EnableLinkedConnections.
  4. Дважды щелкните EnableLinkedConnectionsзапись реестра.
  5. В диалоговом окне «Изменение параметра DWORD» введите 1 в поле «Значение» и нажмите кнопку «ОК».
  6. Выйдите из редактора реестра и перезагрузите компьютер.

решение3

Некоторые установщики должны быть доступны для NT AUTHORITY\SYSTEM, но сетевые диски специфичны для пользователя. EnableLinkedConnectionsв этом случае не поможет.

Удалите существующий сетевой диск и снова подключите его на системном уровне. Для этого создайте запланированную задачу с действием: net.exeи аргументами: use z: \\host\share\(при необходимости укажите пароль) и измените учетную запись для запуска этой задачи на NT AUTHORITY\SYSTEM. /PERSISTENT:yesпохоже, не работает, поэтому вам нужно запланировать ее запуск при загрузке

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

Связанный контент