Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Управление службой из приложения (Remoting)


Автор: opozdaika 28.4.2008, 11:59
Пишу под Вистой VS 2008 С# framework 3.5.
Я написал Службу Windows и Приложение (ехе-шник), которое подключается к Службе и производит обмен данными с ней. 
В своей системе я реализовал два механизма и у обоих проблемы доступа. Вот по-порядку:
----------------------

1. IPC-remoting для обмена данными между Службой и Приложением. Ipc-сервер реализован в Службе, клиент – мое Приложение

Проблема: Работает только если Служба-сервер запущена под пользовательской учетной записью – той же, под которой работает Приложение-клиент. Стоит мне перевести службу под уч. запись Local Service или System (а именно так и должно быть в релизе), в клиенте возникает исключение:
"Не удалось подключиться к IPC-порту: Отказано в доступе"

Вопрос:  Как настроить права Remoting на использование канала, чтобы не было отказа в доступе?
--------------------

2. ServiceController для запуска и останова Службы из Приложения.

Проблема: Работает только если Приложение запущено "от имени администратора". При обычном запуске (в том числе и из отладчика) я могу только проверить состояние службы (ServiceController.CanStop), но не могу ее запускать или останавливать: метод ServiceController.Stop() дает исключение: отказ доступа.

Вопрос: Как сделать так, чтобы при запуске Приложения не от имени администратора при попытке остановить/запустить Службу полозователю, как это принято в Висте, выдавалось бы предупреждение UAC, а не сразу отлуп?

Спасибо. 

Автор: mr.DUDA 28.4.2008, 14:04
Можно попробовать в свойствах службы указать под каким аккаунтом она запускается. Указать там пользовательский аккаунт.

Автор: opozdaika 28.4.2008, 14:29
Цитата(mr.DUDA @ 28.4.2008,  14:04)
Можно попробовать в свойствах службы указать под каким аккаунтом она запускается. Указать там пользовательский аккаунт.

Я так и сказал, что под пользовательским аккаунтом служба позволяет работу ipc. Но обычные службы должны запускаться под системным или локал-сервер аккаунтом. Я бы тоже так хотел.

Автор: mr.DUDA 28.4.2008, 15:31
Цитата(opozdaika @  28.4.2008,  14:29 Найти цитируемый пост)
Но обычные службы должны запускаться под системным или локал-сервер аккаунтом

А нельзя вручную забить в Properties службы нужный аккаунт? Ногами не бить, не проверял на юзерах с ограниченными правами.

Автор: opozdaika 26.4.2010, 11:54
Я хотел бы сообщить, как решились мои вопросы.

1. Для запуска и останова службы , работающей под уч записью Local Service, средствами ServiceController я применяю подход, описанный в 
http://vstslive.wordpress.com/
А именно, в манифесте нужно прописать:
<requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” />
В этом случае при старте программы выдается окно подтверждения на запуск от имени администратора. Конечно, лучще было бы выдавать запрос не при старте программы, а непосредственно перед выполнением действия по старту/остановке службы. Но это уже и так огромный прогресс.

2. Проблемы с Remouting решились после отказа от Remouting в пользу кошачей технологии (с неудобопроизносимым названием CWF). 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)