Служба Windows не может получить доступ к общей папке во время загрузки, пока не запустится вручную или Windows Explorer не переключится - PullRequest
3 голосов
/ 21 декабря 2009

У меня есть служба Windows, работающая в локальной системе, которая просто продолжает пытаться получить доступ к файлу с UNC-путем в форме \\ machine \ folder \ file.txt до тех пор, пока это не будет успешно выполнено. Он успешно завершается сразу же, когда я запускаю службу вручную, но при перезагрузке он получает системную ошибку 53 (сетевой путь не найден), пока я не выполню что-либо, например, выход из системы или «скрипта» с Windows Explorer , например двойной щелчок несвязанный текстовый файл (странно, я знаю). Но нет надежного трюка; Я не уверен, что вызывает внезапную возможность увидеть общую папку.

Однако я случайно нашел надежное «решение», которое заключается в попытке создать CreateProcess в «net use I: \\ machine \ folder» из службы для сопоставления общей папки перед попыткой доступа к ней (я продолжаю используя путь UNC, а не я :). Вызов net use, по-видимому, немедленно активирует мою возможность доступа к общей папке из службы, несмотря на тот факт, что сам вызов net use, вероятно, дает сбой (я не проверял, потому что вы даже не должны иметь возможность подключать диски из службы).

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

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

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

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

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

0 голосов
/ 22 декабря 2009

Вы пытались запустить службу с набором учетных данных домена?

...