На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Взаимодействие моего приложения с моей службой , (на одном компе)
    Помучаю вас еще. Вот я сделал ремоутинг. Мой ipc-сервер реализован в службе Windows, клиент - обычное приложение (ехе-шник). Проблема в том, что все работает только когда служба-сервер запущена под пользовательской учетной записью (той же, под которой я рабтаю и запускаю клиентский ехе-шник). Стоит мне перевести службу под уч. запись Local Service (а именно так у меня и должно быть), в клиенте возникает исключение:
    "Не удалось подключиться к IPC-порту: Отказано в доступе"
    Вопрос: где задаются права на использование канала?
    Спасибо.
      Сделай Local System
        Цитата PIL @
        Сделай Local System

        Все равно отказано в доступе
          Перечислено,всё, что можно кроме стандартного МС подхода. Использовать надо нетовский ServiceController класс. и ,v частости, его метод OnCustomCommand.
            Цитата MIF @
            Использовать надо нетовский ServiceController класс

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

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

            То есть и ремоутинг и ServiceController не имеют доступа. При этом ServiceController не может остановить/запустить службы НЕЗАВИСИМО от того, под какой уч. записью они работают, в то время как ремоутинг по крайней мере пашет при совпадении уч. записи службы и клиетна.

            Задача остается прежней: наладить взаимодействие по ремоутингу (ipc) в случае когда служба запускается не под пользовательской уч. зап.

            Кстати, забыл сказать, что пишу под Вистой. Может это важно...
            Сообщение отредактировано: Jupiter -
              Цитата PIL @
              - если юзаешь 3.0, то для WCF если мне не изменяет память - один из видов байндинга

              и я что-то такое припоминаю.

              Цитата Jupiter @
              Помучаю вас еще.

              Твои вопросы как бальзам на душу, жаль что помочь не могу. Самому интересно - поборол таки проблему?
                Я пишу под Вистой. На сегодня я реализовал в своей системе два рекомендованных мне здесь механизма:
                1. IPC-remoting для обмена данными между Службой и Приложением;
                2. ServiceController для запуска и останова Службы из Приложения.

                Оба механизма капризничают относительно прав доступа:
                1. IPC-remoting работает только если Служба запущена под той же учетной записью, под которой работает Приложение;
                2. ServiceController работает только если Приложение запущено "от имени администратора".

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

                  1. Как настроить права Remoting, чтобы объяснить Службе, что ей нечего бояться и можно давать всем?


                  Возможно мало прав при открытие точки, тогда нужно указать:

                  BinaryServerFormatterSinkProvider.TypeFilterLevel = TypeFilterLevel.Full; // полагаю, что у вас бинарный провайдер для IPC

                  Умные дяди скажут как это через app.config это сделать :)
                  Сообщение отредактировано: TerraGhost -
                    Цитата
                    BinaryServerFormatterSinkProvider.TypeFilterLevel = TypeFilterLevel.Full;

                    Я сделал так. Теперь у меня вместо простенького
                    ExpandedWrap disabled
                           configChannel = new IpcChannel("ConfigCommunicationIpcChannel");


                    стало вот такое:
                    ExpandedWrap disabled
                           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);


                    Потенциальных возможностей больше, но работает по-прежнему только под пользовательской уч. зап. :wall:
                      Помогите, плиз! У меня возникла точно такая же проблема. как ее решить????? :'(
                        Я хотел бы сообщить, как решились мои вопросы.

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

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


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0566 ]   [ 15 queries used ]   [ Generated: 19.07.25, 07:46 GMT ]