Можно ли использовать WMI в службе Windows? - PullRequest
0 голосов
/ 28 декабря 2010

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

Вот что я делаю.

  1. Служба подписывается на событие NetworkChange.NetworkAvailabilityChanged.
  2. Когда получено событие, запрос WMI SELECT * FROM Win32_Printer WHERE Network=true.
  3. Выполните цикл по ManagementObjectCollection и проверьте состояние каждого принтера.
  4. Если принтер подключен, позвоните ManagementObject.InvokeMethod("SetDefaultPrinter",null)

Когда я проверяю журнал событий безопасности, я обнаружил события аудита отказов «Неизвестное имя пользователя или неверный пароль», которые, как я предполагаю, объясняются тем, что я не предоставил явноэта информация.

Есть ли способ сделать это без указания имени пользователя и пароля, или учетные данные требуются в целях безопасности?

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

Служба должна запускаться от имени какого-либо пользователя , например NETWORK SERVICE, LOCAL SERVICE или SYSTEM. Вы должны убедиться, что данная учетная запись имеет разрешение делать то, что вы хотите. Чтобы изменить разрешение развернутой службы в Windows, перейдите в «Пуск»> «Администрирование»> «Службы», затем вы можете изменить учетную запись службы для данной службы.

0 голосов
/ 24 апреля 2017

Я знаю, что это старый вопрос, но я чувствую, что существующий ответ не вполне обеспечивает управляемое решение.

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

Создать программу winforms, используя скрытую форму, и запускать ее, когда пользователь входит в систему с помощью планировщика задач.

Таким образом, ПК может использоваться многими пользователями и получать выгоду от приложения без необходимости изменять настройки входа в систему.

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

0 голосов
/ 28 декабря 2010

Вы должны использовать linqtowmi , для этого он прекрасно работает!

...