Подключите сетевой диск, который будет использоваться сервисом

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
207
задан bluish 10 January 2013 в 02:55
поделиться

3 ответа

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

подход процесса помощника может быть довольно простым: просто создайте новый сервис, который подключает диск и запускает 'реальный' сервис. Единственные вещи, которые не совсем тривиальны об этом:

  • сервис помощника должен будет передать все соответствующие команды SCM (запустите/остановите, и т.д.) к реальному сервису. Если реальный сервис примет пользовательские команды SCM, не забудьте передавать тех также (то я не ожидаю сервис, который считает пути UNC экзотичными для использования таких команд, хотя...)

  • Вещи могут стать немного хитрыми мудрый учетными данными. Если реальная услуга работает в соответствии с учетной записью обычного пользователя, можно выполнить сервис помощника в соответствии с той учетной записью также, и все должны быть в порядке, пока учетная запись имеет соответствующий доступ к сетевому ресурсу. Если реальный сервис будет только работать, когда выполнено LOCALSYSTEM или somesuch, вещи становятся более интересными, им или не будут в состоянии 'видеть' сетевой диск вообще или потребовать, чтобы некоторое учетное манипулирование получило вещи работать.

41
ответ дан mdb 23 November 2019 в 04:44
поделиться

Вы wan't для или изменения пользователя, что Сервисные выполнения под от "Системы" или находят подлый способ выполнить отображение как Систему.

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

1
ответ дан Torbjörn Gyllebring 23 November 2019 в 04:44
поделиться

Вы могли нас 'сетевое использование' команда:

var p = System.Diagnostics.Process.Start("net.exe", "use K: \\\\Server\\path");
var isCompleted = p.WaitForExit(5000);

, Если это не работает в сервисе, попробуйте Редактирование PInvoke WNetAddConnection2

и Winapi: , Очевидно, я неправильно понял Вас - Вы не можете изменить исходный код сервиса, правильно? В этом случае я следовал бы за предложением mdb, но с небольшим скручиванием: Создайте свой собственный сервис (позволяет, называют его сервисом отображения), который подключает диск, и добавьте этот сервис отображения к зависимостям для первого (фактическая работа) сервис. Тем путем рабочий сервис не запустится, прежде чем сервис отображения запустил (и подключил диск).

9
ответ дан Community 23 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: