В доступе отказано в доступе под учетной записью локального администратора

1565
PedroC88

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

Войдя в систему как администратор, я могу вручную скопировать файлы из сети в определенную папку Program Files, но служба существует с исключением PermissionDenied, чтобы ЗАПИСАТЬ файл. Я также уверен, что файлы не блокируются до записи.

Ошибка заключается в следующем:

Доступ к пути "... / SomeAssembly.dll" запрещен.

Почему служба выдает такую ​​ошибку и как я могу ее исправить? (Я также разработал сервис, поэтому изменения в сборке могут быть на столе).


Обновить

Я также попытался запустить его под, Systemно он не может читать файлы в сети (не знаю почему), LocalServiceи NetworkServiceучетные записи AFAIK не имеют достаточных прав для внесения изменений в ProgramFiles ... не так ли?


Обновление 2

Причина, по которой я не могу использовать, Systemсостоит в том, что эта учетная запись не имеет доступа к сетевым ресурсам по своей конструкции, то же самое происходит, поскольку NETWORK SERVICEона не имеет доступа к локальным ресурсам. Проблема с учетной записью администратора заключается в том, что Windows блокирует операцию копирования файла, когда она выполняется службой.

Есть идеи????

5

3 ответа на вопрос

1
Kit Ramos

Ну, во-первых, я проверю, помечены ли какие-либо файлы как «Только для чтения», так как я видел, что этот атрибут иногда заменяет разрешения NTFS. Я видел случаи, когда вы можете скопировать файл в графическом интерфейсе, после нажатия кнопки «Да» на запрос «Вы уверены?», Но любые попытки использовать программу для записи данных в нее сразу же заканчиваются неудачей, подсказок нет.

Также я бы позаботился о том, чтобы служба и связанные с ней службы действительно работали под той учетной записью, о которой вы думаете. Я видел несколько случаев, когда служба A будет вызывать службу B для выполнения некоторой задачи, а затем передавать результаты обратно в службу A, чтобы завершить задачу. И если только Служба An использует учетную запись с надлежащими разрешениями, то попытка не удастся (поскольку, хотя An вызывает B, она не заставляет ее работать так, как использует тот же пользователь An, поэтому, если B не настроен на используйте правильного пользователя, он будет использовать пользователя по умолчанию, который может не иметь доступа к нужному вам месту)

Также, если возможно, убедитесь, что путь, который он использует как путь c:\program files\SomeAssembly.dll\somefile.txtили что-то подобное, C:/users/don/app/SomeAssembly.dllтакже может выдавать ошибки.

0
PedroC88

В конце я сделал, чтобы приложение скопировало файлы с удаленного ресурса в папку с низкими ограничениями ( Application Dataесли я правильно помню), а затем вызвало службу, запущенную под ней System, чтобы скопировать их Program Files.

Преимущество этого подхода заключается в том, что ему не требуются права администратора для копирования файлов по сети на локальный диск (если, readконечно, у вас есть необходимые разрешения для сетевых файлов), а затем он также использует преимущества на низком уровне. ограничения Systemна запись в программные файлы.

-1
surfasb

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

Я бы попробовал это первым.

Я думаю, вы собираетесь убить службу или что-то еще? avirk 12 лет назад 0
Вы всегда можете настроить учетную запись, под которой работает служба. Мой не работает ни под одним из них, а под учетной записью администратора, созданной мной, которая, я уверен, обладает достаточными привилегиями для выполнения задач. PedroC88 12 лет назад 0

Похожие вопросы