
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Помучаю вас еще. Вот я сделал ремоутинг. Мой ipc-сервер реализован в службе Windows, клиент - обычное приложение (ехе-шник). Проблема в том, что все работает только когда служба-сервер запущена под пользовательской учетной записью (той же, под которой я рабтаю и запускаю клиентский ехе-шник). Стоит мне перевести службу под уч. запись Local Service (а именно так у меня и должно быть), в клиенте возникает исключение:
"Не удалось подключиться к IPC-порту: Отказано в доступе" Вопрос: где задаются права на использование канала? Спасибо. |
![]() |
Сообщ.
#17
,
|
|
Сделай Local System
|
Сообщ.
#18
,
|
|
|
Цитата PIL @ Сделай Local System Все равно отказано в доступе |
![]() |
Сообщ.
#19
,
|
|
Перечислено,всё, что можно кроме стандартного МС подхода. Использовать надо нетовский ServiceController класс. и ,v частости, его метод OnCustomCommand.
|
Сообщ.
#20
,
|
|
|
Цитата MIF @ Использовать надо нетовский ServiceController класс Спасибо. Я попробовал этот класс. Но к сожалению он больше подходит для запуска и останова служб. Плользовательское действие там предусмотрено, но это чрезвычайно скудный механизм. Ремоутинг рулит. И вот еще что я заметил: ServiceController.CanStop выдает честно может или нет служба быть остановлена, но остановить ее не удается: метод ServiceController.Stop() дает все то же исключение: отказ доступа. Я пробовал не только мою службу, но и другие, которые там были. Результат один. То есть и ремоутинг и ServiceController не имеют доступа. При этом ServiceController не может остановить/запустить службы НЕЗАВИСИМО от того, под какой уч. записью они работают, в то время как ремоутинг по крайней мере пашет при совпадении уч. записи службы и клиетна. Задача остается прежней: наладить взаимодействие по ремоутингу (ipc) в случае когда служба запускается не под пользовательской уч. зап. Кстати, забыл сказать, что пишу под Вистой. Может это важно... |
Сообщ.
#21
,
|
|
|
и я что-то такое припоминаю. Цитата Jupiter @ Помучаю вас еще. Твои вопросы как бальзам на душу, жаль что помочь не могу. Самому интересно - поборол таки проблему? |
Сообщ.
#22
,
|
|
|
Я пишу под Вистой. На сегодня я реализовал в своей системе два рекомендованных мне здесь механизма:
1. IPC-remoting для обмена данными между Службой и Приложением; 2. ServiceController для запуска и останова Службы из Приложения. Оба механизма капризничают относительно прав доступа: 1. IPC-remoting работает только если Служба запущена под той же учетной записью, под которой работает Приложение; 2. ServiceController работает только если Приложение запущено "от имени администратора". Вопросы: 1. Как настроить права Remoting, чтобы объяснить Службе, что ей нечего бояться и можно давать всем? 2. Как сделать так, чтобы при запуске Приложения не от имени администратора при попытке остановить/запустить Службу полозователю, как это принято в Висте, выдавалось бы предупреждение UAC, а не сразу отлуп? |
Сообщ.
#23
,
|
|
|
Цитата 1. Как настроить права Remoting, чтобы объяснить Службе, что ей нечего бояться и можно давать всем? Возможно мало прав при открытие точки, тогда нужно указать: BinaryServerFormatterSinkProvider.TypeFilterLevel = TypeFilterLevel.Full; // полагаю, что у вас бинарный провайдер для IPC Умные дяди скажут как это через app.config это сделать ![]() |
Сообщ.
#24
,
|
|
|
Цитата BinaryServerFormatterSinkProvider.TypeFilterLevel = TypeFilterLevel.Full; Я сделал так. Теперь у меня вместо простенького ![]() ![]() configChannel = new IpcChannel("ConfigCommunicationIpcChannel"); стало вот такое: ![]() ![]() BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider(); provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full; System.Collections.Hashtable props = new System.Collections.Hashtable(); props["portName"] = "ConfigCommunicationIpcChannel"; configChannel = new IpcChannel(props, null, provider); Потенциальных возможностей больше, но работает по-прежнему только под пользовательской уч. зап. ![]() |
Сообщ.
#25
,
|
|
|
Помогите, плиз! У меня возникла точно такая же проблема. как ее решить?????
![]() |
Сообщ.
#26
,
|
|
|
Я хотел бы сообщить, как решились мои вопросы.
1. Для запуска и останова службы , работающей под уч записью Local Service, средствами ServiceController я применяю подход, описанный в http://vstslive.wordpress.com/ А именно, в манифесте нужно прописать: <requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” /> В этом случае при старте программы выдается окно подтверждения на запуск от имени администратора. Конечно, лучще было бы выдавать запрос не при старте программы, а непосредственно перед выполнением действия по старту/остановке службы. Но это уже и так огромный прогресс. 2. Проблемы с Remouting решились после отказа от Remouting в пользу кошачей технологии (с неудобопроизносимым названием CWF). |