Примечание: я смог продублировать свою проблему, используя другие компьютеры WinXp вместо USB-накопителя, подключенного к моему маршрутизатору. Точно такая же проблема. Итак, суть в том, что я могу получить доступ (и изменить) файлы по сети, если я делаю это вручную, но моя служба Windows не работает при попытке сделать то же самое. Если я запускаю программу через Visual Studio, она работает. Если я запускаю тот же точный код, что и служба Windows, он не работает.
Я создал службу Windows, которой требуется доступ к общему сетевому расположению. Чтобы проверить это дома, я подключил USB-накопитель к маршрутизатору Netgear N600 WNDR3400. Параметры хранения USB показывают имя рабочей группы как Рабочая группа, а путь к файлу:
\\ ReadyShare \ usb_storage
Служба не может получить доступ к файлам в этой сетевой папке. Я получаю сообщение об ошибке, что файл не может быть найден или что в доступе отказано, в зависимости от того, что я пытаюсь сделать. (Файл действительно существует.) Однако я могу получить доступ к этим файлам / изменить их прямо с моего ноутбука (Win8), и я могу сделать то же самое на ноутбуке моей жены (WinXP). Служба работает как пользователь Local System
.
Я пробовал работать как Network Service
, как .\administrator
и как .\JaneDoe
. Неудачно.
Я также попытался изменить разрешения для папок newtwork, но он не зависает. Например, если я попытаюсь дать Everyone
полный контроль:
Он просто возвращается в предыдущее состояние после нажатия кнопки «Применить»:
Я также попытался добавить нового пользователя (см. Кнопку Добавить выше), но затем я получаю эту ошибку:
Любые идеи, как я могу сделать эту работу? Я просто хочу, чтобы мой сервис имел доступ на чтение / запись (даже полный, мне все равно) к папкам в этой сети.
Редактировать - я использовал Process Monitor, и, как и ожидалось, это ошибка:
Больше неудачных попыток
- Используйте другой USB-накопитель
- Отключить брандмауэр Windows в окне XP
- Вместо использования пути UNC используйте подключенный диск
РЕДАКТИРОВАТЬ - Код для доступа к сетевым файлам Примечание. Файл не найден (даже если он существует).
private UpdaterManifest GetUpdaterManifest()
{
string filePathAndName = Path.Combine(this._sourceBinaryPath, this._appName + ".UpdaterManifest");
if (!File.Exists(filePathAndName))
{
// Always hit here
}
}