Я пытаюсь запустить 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
Это ожидаемое (хотя и необычное) поведение.
Запустить программу из сетевого ресурса можно несколькими способами.
- Общий ресурс подключен к сетевому диску: например
g:
->\\server\share
- Доступ к общему ресурсу осуществляется напрямую через общий ресурс:
\\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
В редакторе реестра найдите и щелкните следующий подраздел реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
На правой панели щелкните правой кнопкой мыши пункт «Создать», а затем щелкните «Параметр DWORD (32 бита)».
- Назовите новую запись реестра как
EnableLinkedConnections
.- Дважды щелкните
EnableLinkedConnections
запись реестра.- В диалоговом окне «Изменение параметра DWORD» введите 1 в поле «Значение» и нажмите кнопку «ОК».
- Выйдите из редактора реестра и перезагрузите компьютер.
решение3
Некоторые установщики должны быть доступны для NT AUTHORITY\SYSTEM
, но сетевые диски специфичны для пользователя. EnableLinkedConnections
в этом случае не поможет.
Удалите существующий сетевой диск и снова подключите его на системном уровне. Для этого создайте запланированную задачу с действием: net.exe
и аргументами: use z: \\host\share\
(при необходимости укажите пароль) и измените учетную запись для запуска этой задачи на NT AUTHORITY\SYSTEM
. /PERSISTENT:yes
похоже, не работает, поэтому вам нужно запланировать ее запуск при загрузке
После запуска вся система увидит сетевой диск. В проводнике Windows он будет отображаться как отключенный, но тем не менее работать будет.