Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Распределённые приложения и сеть > Управление службой из приложения (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 | ||
Я так и сказал, что под пользовательским аккаунтом служба позволяет работу ipc. Но обычные службы должны запускаться под системным или локал-сервер аккаунтом. Я бы тоже так хотел. |
Автор: opozdaika 26.4.2010, 11:54 |
Я хотел бы сообщить, как решились мои вопросы. 1. Для запуска и останова службы , работающей под уч записью Local Service, средствами ServiceController я применяю подход, описанный в http://vstslive.wordpress.com/ А именно, в манифесте нужно прописать: <requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” /> В этом случае при старте программы выдается окно подтверждения на запуск от имени администратора. Конечно, лучще было бы выдавать запрос не при старте программы, а непосредственно перед выполнением действия по старту/остановке службы. Но это уже и так огромный прогресс. 2. Проблемы с Remouting решились после отказа от Remouting в пользу кошачей технологии (с неудобопроизносимым названием CWF). |