4

Примечание: я смог продублировать свою проблему, используя другие компьютеры 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
    }
}

1 ответ1

1

Итак, вы хотите получить доступ к общему ресурсу на компьютере с XP Home по сети, где клиент работает как служба на Windows XP Home или Windows 8?!

Есть несколько аспектов, играющих в этом, и вы должны понять их все правильно. Предполагая, что ваш сервис работает как SYSTEM (он же LocalSystem), вам необходимо убедиться в следующем:

  1. сам общий ресурс должен иметь правильные разрешения (Everyone нужен соответствующий набор ACL) - это проблемная точка в Windows XP Home, так как в ней отсутствует редактор безопасности (с другой стороны, это означает, что в нормальных условиях вы даже не будете в первую очередь может связываться с разрешениями, и настройки по умолчанию могут работать) ... кажется, есть специальный инструмент XP Home для назначения разрешений для общего ресурса. Вы можете выполнить его как shrpubw (предположительно для «поделиться ... волшебником»?). Смотрите эту ссылку.
  2. папка, которую вы разделяете, также требует соответствующих разрешений для Everyone . - вы можете сделать это с помощью cacls в командной строке
  3. самое главное в моем опыте - правильно настроить политику компьютера. К сожалению, это именно то, где вы застряли в XP Home, потому что MS преднамеренно наносит ущерб функциям этой редакции Windows.
    • Одним из параметров политики, влияющих на это, будет «Доступ к сети: общие ресурсы, к которым можно обращаться анонимно», который, я думаю, можно установить вручную в реестре, манипулируя HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters значением NullSessionShares (REG_MULTI_SZ). это значение состоит из нескольких значений. В regedit он будет отображаться в виде нескольких строк. В одну строку добавьте название акции. Т.е. если ваша \\readyshare\USB_Storage от клиента, эта папка называется USB_Storage . После этого запустите net stop lanmanserver после чего net start lanmanserver (эта служба называется Server разделе Управление компьютером /MMC) ...
    • Другая политика, влияющая на это, - «Доступ к сети: разрешить всем доступ к разрешению анонимных пользователей» - в этом я не уверен на 100%, но думаю, что он соответствует значению HKLM\SYSTEM\CurrentControlSet\Control\LSA RestrictAnonymous (REG_DWORD см. эту статью базы знаний), которая должна иметь значение 0 (но по умолчанию 1). Я не уверен, что вы можете избежать перезагрузки с этой настройкой.

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


Благодаря средствам чата мы поняли это в интерактивном режиме. Использование shrpubw (упомянутое в редактировании к первому пункту выше) сделало трюк следующим образом.

В меню "Пуск" выберите "Выполнить"

... введите shrpubw и нажмите ENTER.

Запустить диалог

Перейдите сразу к следующему шагу в мастере

... пропуская это:

Шаг 1 shrpubw

Укажите правильную папку для общего доступа и назовите общий ресурс

Как это:

Шаг 2

... и продолжить "Далее"

Выберите "Пользовательский" для разрешений на следующем шаге.

Вот:

Шаг 3

... после нажатия кнопки "Пользовательский" вы увидите следующее:

Редактор безопасности

... теперь убедитесь, что изменили разрешения по мере необходимости. Сущность "Все" - это обычно то, что вы хотите настроить. В XP Home это должно означать "ANONYMOUS LOGON", на который влияют настройки, указанные в первой части этого ответа (пункт 3).

Сохраните разрешения и перейдите к следующему шагу.

Завершить работу мастера

... как это:

Последний шаг

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

ПРИМЕЧАНИЕ: очень вероятно, что параметры политики, упомянутые выше, также влияют на это (пункт 3). Таким образом, этот шаг, вероятно, все еще необходим на "сервере" (то есть на машине, которая предоставляет общий ресурс).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .