Исполняемый файл, запущенный службой windows с использованием учетной записи локальной системы, не может получить доступ к сетевым ресурсам

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

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

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

однако, когда программное обеспечение пытается подключиться к общей папке windows (UNC name), оно не может подключиться. А если исполняемый файл был запущен вручную, он подключается нормально.

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

Edit: я забыл упомянуть, что это приложение может (и чаще всего будет) работать на Win2K не XP, и я думаю, что я прав, говоря, что учетная запись локальной сети недоступна до XP?

3 ответов


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

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

Edit: IIRC, учетная запись сетевой службы была введена в Server 2003, и добавлен в один из пакетов обновления XP.

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


когда у вас есть служба, которая работает под NT AUTHORITY\LOCALSYSTEM (это имя учетной записи службы), она отображается как учетная запись DOMAINNAME\COMPUTERNAME$ (обратите внимание на знак$) для остальной части сети. То есть он отображается как учетная запись компьютера в Active directory. Просто предоставьте свои права доступа к файлам и общим ресурсам для DOMAINNAME\COMPUTERNAME$ , и вы должны быть хороши.


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

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

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