Как подключить сетевой диск из службы Windows? - PullRequest
3 голосов
/ 27 апреля 2009

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

NET USE U: \\192.168.55.6\folder password

При выполнении командного файла либо в конструкторе служб, либо в событии onstart, диск не отображается?

        Process process = new Process();
        process.StartInfo.FileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MAP.BAT";
        process.StartInfo.CreateNoWindow = false;
        process.Start();

Как подключить один сетевой диск из службы Windows?

Ответы [ 7 ]

5 голосов
/ 08 декабря 2011

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

Добавить ссылку на COM к Объектная модель хоста скрипта Windows , которая добавляет запись IWshRuntimeLibrary в раздел ссылок. Теперь вы можете использовать следующий код для сопоставления диска.

using IWshRuntimeLibrary;

IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("k:",@"\\192.168.20.35\MyShare", Type.Missing, "user1", "password1");

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

network.RemoveNetworkDrive("k:");

Я задокументировал подробные шаги здесь

2 голосов
/ 28 апреля 2009

Все проблемы решены с помощью Map Network Drive (API) для сопоставления сетевого диска. Я подключаю требуемые диски во время события службы OnStart.

1 голос
/ 28 апреля 2009

Есть две проблемы:

  1. Сопоставления используются только для сеанса пользователя, что означает, что фактически вы не можете использовать подключенный диск для Службы. Вам нужно будет использовать путь .
  2. Вторая проблема заключается в том, что служба (с использованием локальной системной учетной записи) не имеет доступа к сети или, более конкретно, к Требуется ресурс. Чтобы решить эту проблему, вам необходимо: «компьютер», на котором служба работает с определенным доступом папку или настройте службу для использования сетевой учетной записи (DOMAIN) который имеет доступ к ресурсу.
1 голос
/ 27 апреля 2009

Может быть, лучше просто вызвать правильную функцию API, чем вызывать пакетный файл для вызова другого исполняемого файла. Функция, которую вы ищете: DefineDosDevice()

0 голосов
/ 27 апреля 2009

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

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

0 голосов
/ 27 апреля 2009

Запускаете ли вы службу под учетной записью пользователя, которая принадлежит паролю? Команда MAP USE будет использовать текущего пользователя, если вы не передадите / USER: anotheruser

0 голосов
/ 27 апреля 2009

Я думаю, что сервисы не могут подключать сетевые диски, если у них нет права «взаимодействовать с рабочим столом»?

Попробуйте запустить службу под учетной записью «Сетевая служба», а не «Локальная система»?

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