Удаленная консультация





Простая и удобная удаленная консультация пользователей.
Доступен исходный код.

Назначение:

Удаленная консультация пользователей по интернету. Будет полезна на стадии внедрения разработок,  когда необходимо достаточно часто консультировать пользователей по функционалу приложения, а так же в период сопровождения клиента.

Состав:

Программный продукт состоит из двух частей:

  1. серверная часть, работающая в качестве службы  на Windows (SetupService.exe);
  2. серверная часть для операционной системы CentOS (rh_server);
  3. клиентское приложение (Удаленная консультация.exe), выполняющее соединение и управление.

Для работы приложений необходимо .NET Framework 2.0 и выше, что уже предустановлено в ОС Windows. Версия сревера для Linux реализована на golang.

Серверная часть

Windows

Приложение устанавливается как служба «Сервер удаленной консультации», после установки службу необходимо запустить вручную. Служба работает на 45823 порту и ведет лог в журнале приложений. Ограничение на количество одновременно работающих пользователей 50 клиентов. Никаких привязок клиентов к компьютеру нет.  Служба принимает следующие параметры командной строки:

  1.  port — номер порта, на котором будет работать служба, пример port=80;
  2.  key — любая символьная строка, используется для запроса к службе по протоколу HTTP для получения списка активных пользователей в формате csv, key=12ff333d66ererd. Пример запроса, если сервис работает на 45823 порту: http://имя_сервера:45823/?key=12ff333d66ererd&command=list. На данный момент поддерживается одна команда list, выводящая список всех подключенных клиентов с переданными пользовательскими данными user_data.

Для задания параметров службы необходимо в реестре в ветке:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRemote Help Service  в параметре ImagePath дописать нужные параметры и перезапусть службу. Например для работы на 80 порту ключ ImagePath будет иметь вид: "C:Program Files (x86)RhRemote Help ServiceRhService.exe" port=80

CentOS

Сервер выполнен в виде бинарного исполняемого файла и  принимает только один параметр port, например rh_server -port=80. Пример запуска рассмотрен в связанной статье.

Клиентская часть

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

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

Настройка качества передаваемого изображения представлена в двух вариантах настройках канала связи:

  1. нормальный (изображение с палитрой 8 bit). Данный вариант рекомендуемый;
  2. отличный (изображение с палитрой 16 bit).

Программа не сохраняет параметры подключения, для этого необходимо использовать параметры запуска. Эти же параметры можно использовать и при интеграции с 1С:

  1. ip – указывает сервер для подключения, пример, ip=localhost
  2. url — адрес страницы на доступном сайте, которая возвращает строку с адресом сервера для подключения, например, url=mysite/server. Возвращаемая строка должна иметь следующий вид:ip=myserver. Параметр ip имеет приоритет на url.
  3. client – параметры, указывает, что приложение запускается на клиенте, при этом все элементы на форме неактивны  и по окончании сеанса, клиентское приложение закроется автоматически. Пример, client=true;
  4. palette — определяет размерность палитры передачи данных, напрямую зависит от качества канала связи. Возможные параметры 8, 16. Пример, palette=8.
  5. resolution — определяет разрешение экрана, на которое будет отображаться экран клиента. Используются для сжатия изображения для более удобной работы. Нижнее ограничение 1024×768, верхнее ограничение — это исходное изображение экрана клиента. Пример, resolution= 1440×900
  6. mouse — определяет отрисовывать ли курсор клиента или нет. Если параметр не установлен, то курсор клиента  отрисовывается. Если значение false, то все изменения в состоянии курсора клиента отражаются на стороне консультанта в его текущем курсоре, то есть оба управляют одним курсором. Пример,  mouse=false. По умолчанию значение параметра true.
  7. mouse_move — определяет передавать ли данные о движении курсора на клиент. При низкоскоростном канале отключение данного параметра уменьшит нагрузку на канал связи. Пример,  mouse_move=false. По умолчанию значение параметра true, то есть данные о движении курсора передаются.
  8. user_data — любая последовательность символов, определяющих пользовательские данные. Данные затем можно получить командой list к серверу и использовать для анализа подключенных клиентов. Пример user_data="ФИО:Иванов Иван Иванович;ИНН=1122334455;Конфигурация:УТ 11"

В самой 1С делается внешняя обработка, добавляется макет с типом двоичные данные и загружается туда приложение. 

При использовании обычных форм добавляется событие ПередОткрытием в обработку со следующим кодом:

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

Отказ = Истина;
Макет = ПолучитьМакет("Имя макета с программой");
Путь = ПолучитьИмяВременногоФайла("exe");
Макет.Записать(Путь);
// вместо localhost адрес вашего сервера
ЗапуститьПриложение(Путь + " ip=localhost client=true");

КонецПроцедуры

Для управляемых форм во внешнюю обработку добавляется метод ПриОткрытии, при этом модуль оформлен в соответствии правилами оформления внешних обработок:

&НаКлиенте
Процедура ПриОткрытии(Отказ)

Отказ = Истина;
Адрес = ПолучитьАдресФайлаНаСервере();
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(Адрес);
УдалитьИзВременногоХранилища(Адрес);

Путь = ПолучитьИмяВременногоФайла("exe");
ДвоичныеДанныеФайла.Записать(Путь);

ЗапуститьПриложение(Путь + " ip=localhost client=true");

КонецПроцедуры

&НаСервере
Функция ПолучитьАдресФайлаНаСервере()

ОбъектФормы = РеквизитФормыВЗначение("Объект");
Макет = ОбъектФормы.ПолучитьМакет("Макет");
Возврат ПоместитьВоВременноеХранилище(Макет, УникальныйИдентификатор);

Исходный код

Исходный код можно найти в моем профиле на GitHub.(RhClient, RhServer_Windows, легкая реализация под Linux RhServer_Linux)

Обновление

Версия 2.1.2

Для обновления необходимо использовать новую версию клиента и сервера.

Изменения в версии:

1. Улучшена стабильность работы приложения.

Версия 2.1.1

Для обновления необходимо использовать новую версию клиента и сервера.

Изменения в версии:

1. Улучшена скорость передачи изображения.

Версия 2.1.0

Для обновления необходимо использовать новую версию клиента.

Изменения в версии:

1. Исправлена ошибка при эмулиции нажатия клавиш;

2. Добавлены примеры внешних обработок.

Версия 2.0.0

Для обновления необходимо использовать новую версию клиента и сервера.

Изменения в версии:

1. Добавлена возможность обмена файлами.

2. Убрана поддержка RDP Encoder Mirror Driver.

3. Улучшена работа буфера обмена между клиентами.

Версия 1.3.3

Для обновления необходимо использовать новую версию клиента и сервера.

Изменения в версии:

1. Добавлен параметр запуска сервера key, с помощью которого можно посылать команды серверу (list).

2. Добавлен на клиенте параметр user_data, определяющая последовательность пользовательских данных.

Версия 1.3.2

Для обновления необходимо использовать новую версию клиента.

Изменения в версии:

1. Добавлен в клиенте параметр, отвечающий за передачу координат курсора. Если установить значение в false, то координаты не передают, что уменьшает нагрузку на канал. Рекомендуется использовать при низкоскростном канале.

Версия 1.3.1

Для обновления необходимо использовать новую версию клиента.

Изменения в версии:

1. Добавлен в клиенте параметр, отвечающий за показ отрисовки курсора клиента (mouse), по умолчанию данных параметр установлен в true. Если установить значение в false, все изменения в состоянии курсора отражаются на текущем курсоре консультанта.

Версия 1.3

Для обновления необходимо переустановить службу и использовать новую версию клиента.

Изменения в версии:

1. Добавлен параметр для работы службы на определенном порту;

2. Исправлены ошибки в клиенте при масштабировании рисунка;

Версия 1.2

Для обновления необходимо использовать только новую версию клиента.

Изменения в версии:

1. Добавлена возможность динамически масштабировать изображения в момент работы, изменяя размер рабочего окна.

Для этого добавлен переключатель в рабочем окне, который имеет два состояния: масштаб исходный (картинка имеет исходный размер клиента), масштаб по ширине (картинка масштабируется по ширине рабочего окна, изменяя размер окна, картинка подстраивается под размер).

2. Добавлен параметр командной строки url.

Версия 1.1

Для обновления необходимо переустановить службу (удалить старую и установить новую) и использовать новую версию клиента.

Изменения в версии:

1. Добавлена поддержа mirror driver (RDP Encoder Mirror Driver) для Windows Vista, Windows 7 и некоторые версии Windows Server;

2. Добавление масштабирование изображения под нужное разрешение;

3. Улучшение производительности передачи данных.

56 Comments

  1. BorovikSV

    Используется mirror драйвер для захвата изображения?

    Reply
  2. ifal

    Нет. Обычный gdi. Этого достаточно для консультации при работе с 1С. Скорости хватает на 8bit изображении на современных компьютерах, основное замедление будет вносить задержка сети при обращении к серверу (ping)

    Reply
  3. the1

    Киллер Тимвьювера!

    Reply
  4. ifal

    Никто вам не мешает покупать профессиональные программные продукты с широким спектром функционала. Моя утилита практически бесплатна и для конкретной узкой задачи.

    Reply
  5. the1

    (4) так я же только за! Дорабатывайте свой продукт и выходите на рынок. Мы все от этого только выиграем.

    Reply
  6. 1cmax

    Кто хостит проброс vpn тунеля?

    Reply
  7. ifal

    (6) 1cmax, ПО состоит из двух частей: сервера и клиента, где будет стоять сервер и поверх чего будет работать не важно лишь бы его ip и порт были доступны для клиента.

    Reply
  8. prestige

    Глупый вопрос — а зачем в 1С что-то добавлять? Без этого разве нельзя? И еще вопрос — а у клиента тоже NET Framework 2.0 нужен?

    Reply
  9. Terve!R

    (8) prestige, кажется не обязательно в 1С добавлять, а можно просто сделать ярлык для запуска и прописать там, например, «D:Rh.exe ip=74.125.77.147 client=true»

    Reply
  10. ifal

    (8) prestige, добавив в 1с, удобно пользоваться. Можно и не добавлять. У клиента тоже должен быть . NET 2.0 и выше, но это не проблема он уже предустановлен или его более старшая версия и есть на Win XP.

    Reply
  11. cj512

    +, добавить бы еще масштабирование и полноэкранный режим, но для начала неплохо )

    Reply
  12. ifal

    (11) cj512, Спасибо. Утилиту делал для себя и предполагалось, что разрешение экрана у разработчика (консультанта) не хуже чем у клиентов, так и было, поэтому вопрос с масштабированием не стоял, но сделать можно.

    Reply
  13. ifal

    Обновление сборки, версия 1.1 (описание в основной статье).

    Reply
  14. ifal

    Обновление сборки, версия 1.2 (описание в основной статье)

    Reply
  15. AlexB.

    Удобная штука, но иногда, при подключении к клиенту вижу только черный экран, когда закрываю окно, у клиента остается висеть процесс жрущий 100% ядра.

    Reply
  16. ifal

    (15) AlexB., Обновил сборку, скачайте, по идее вам оттуда нужен только клиент. Есть кое-какие изменения, по удобству работы, например, рабочее окно сразу работает в режиме масштабирования, изменяя размер окна, картинка подстраивается пропорционально изначальным размерам изображения.

    Reply
  17. ifal

    Обновление сборки, версия 1.3 (описание в основной статье)

    Reply
  18. Гость

    Программный код открыт ? или есть возможность получить исходники программы?

    Reply
  19. ifal

    (18) Гость, программный код закрыт, пока не открываю.

    Reply
  20. m.s.moiseev

    защиту гилевских курсов можно обойти это супер программой?)

    Reply
  21. ifal

    (20) m.s.moiseev, назначение программы описано в первом абзаце, для других вещей лучше использовать специализированные программы.

    Reply
  22. AlexB.

    (16) Помогло, спасибо, отличное решение для сопровождения своих клиентов.

    Reply
  23. AlexB.

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

    Reply
  24. ifal

    (23) AlexB., На последних версиях с параметрами уменьшающими нагрузку на канал описанная вами проблема наблюдается?

    Reply
  25. MORT32Ram

    Здравствуйте. Очень хорошее дело делаете. Подскажите пожалуйста, на какой порт происходит соединение с клиентом? Я так понял порт указываемый в программе относится к серверу, а на какой порт идет подключение к клиенту? Или я ошибаюсь?

    Reply
  26. ifal

    (25) MORT32Ram, Весь обмен данными идет по порту, который указан на сервере, по умолчанию 45823, соответственно клиент открывает этот порт отправляет и получает данные по этому порту. Обычно фаерволами закрываются разные нестандарные порты, поэтому на сервере вы можете указать скажем 80 порт и соответственно на клиенте будет использовать тот же порт, как это указать в статье написано, если все-таки не получается настроить, то я готов помочь, пишите в личку.

    Reply
  27. MORT32Ram

    (26) Все работает, программа отличная, тестируем, юзаем. Единственное это передача файлов, так и не получилось передать клиенту файл 1cv8.cdn у которого содержимое текст, просто обрывается, ошибок никаких не выдает.

    Reply
  28. ifal

    (27) MORT32Ram, Действительно при передачи файла, если возникает ошибка, то программа просто сбрасывает передачу. Это практически всегда связано с ошибкой доступа к файлу, например, не хватает прав или еще что-то. В данном случае, 1Cv8.cdn — это файл блокировки файловой базы 1С, и программа удаленной консультации не может получить к нему доступ на чтение.

    Reply
  29. MORT32Ram

    (28) Конкретно в тот момент 100% проблема не с доступом, перекидывать пробовал со своего компа на клиентский, что бы выгнать пользователей из файловой базы. Наверное было бы немного удобнее если бы выводилось хотя бы краткое описание ошибки.

    Reply
  30. ifal

    Учту на будущее.

    Reply
  31. MORT32Ram

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

    Reply
  32. ifal

    (31) MORT32Ram, Спасибо. Справедливости ради стоит отметить, что выигрыш может идти из-за того, что ваш сервер к вам ближе и уменьшает задержку передачи данных по сети.

    Reply
  33. MORT32Ram

    (32) Многие клиенты достаточно далеко. Но вообще, безусловно, это тоже влияет.

    Reply
  34. Zmey_72

    А еще бы было хорошо сделать инсталлятор для клиентов, который настраивает клиенту адрес сервера. При запуске в поле сервер стоит локалхост, а нужно бы предустановленнный сервер в интернете или п локальной сети

    Reply
  35. ifal

    (34) Zmey_72, сейчас это можно сделать только через задания параметров запуска приложения ip = нужный адрес, на скриншотах есть пример.

    Reply
  36. Andry.Boris

    Геннадий день добрый! попробовал вашу демо версию клиента Удаленной консультации — изображение вижу отлично а мышкой ничего сделать не могу. в чем может быть проблема. связь отличная.

    Reply
  37. ifal

    (36) возможно, что на клиенте жесткая политика безопасности, и, например, UAC запрещает эмулировать мышь. Чтобы это проверить попробуйте на клиенте от имени администратора запустить.

    Reply
  38. zaoproxy

    Разработка очень интересная и думаю будет востребована. Но есть над чем работать.

    Предложения по улучшению:

    1. добавить в настройки параметр по автоматическому подключению к клиенту. Т.е. на данный момент выходит вопрос про разрешение на подключение.

    2. при использовании в удалённых рабочих столах работает до тех пор, пока сам rdp активен и имеет визуальное отображение на экране. как только стол сворачиваем, управление становится не возможным

    3. на мой взгляд самое значительное: при запуске любых приложений где требуется подтвердить выполняемое действие (контроль учетных записей) изменений на экране не видно и как следствие нет возможности подтвердить или отменить запуск

    4. было бы не плохо организовать простой текстовый час с удалённым компом

    5. не понятно есть ли передача комбинаций клавиш, ну например ctrl+alt+break. если нет — то тоже нужно

    Удачи в разработке!

    Reply
  39. zaoproxy

    В догонку: если мы речь ведем про поддержку 1С, то почему бы не добавить возможность использования в качестве внешней, нативной компоненты

    Reply
  40. ifal

    (38) Спасибо за содержательные комментарий! Этого не хватает =)

    Все описанные вам пункты понятны, кроме 5-ого, так как это должно работать.

    То, что вы отметили, это уже не просто консультация клиента (скачал, запустил и закрыл программу), это полноценное администрирование удаленного компьютера (кроме 4-ого пункта), тут требования к безопасности программы жестче, а так же обязательна будет нужна установка программы в качестве службы и работы от системной учетной записи.

    По поводу компоненты, в том контексте использования, что изначально реализовывал, это не даст никакого выигрыша. Но если рассматривать со стороны построения целой сети клиентов, то есть вы внедряете компоненту клиенту, которая активируется при запуске конфигурации. В итоге вы видите у себя, как обслуживающей организации, целую сеть клиентов, причем в разрезе Организаций, конфигураций и т.д. с возможностью подключения к каждой. Тогда конечно это имеет смысл. Такие пожелания у меня записаны, но на реализацию нужно время.

    Сейчас я двигаюсь немного в другом направлении: передача звука, возможность организовать конференцию.

    Reply
  41. as

    Проект очень интересный. Подскажите исходный код где-то опубликованпланируется?

    Reply
  42. ifal

    (41) Исходный код не опубликован, но мысли такие есть.

    Reply
  43. Andry.Boris

    (42) Будем ждать… если можно киньте в лс.

    Reply
  44. ifal

    Выложен исходный код, ссылки в основной статье.

    Reply
  45. Andry.Boris

    (44) Спасибо, будем изучать…

    Reply
  46. ifal

    (45) Спрашивайте, по мере возможности, буду отвечать

    Reply
  47. Bedazzled

    есть ли проблемы при включенном UAC ?

    Reply
  48. ifal

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

    Reply
  49. Bedazzled

    ясно , спасибо этой версии достаточно

    Reply
  50. danil157

    Добрый день. У клиентов при запуске, просит права администратора. как быть?

    Reply
  51. ifal

    (50) Есть такой момент, при необходимости вы можете пересобрать проект как вам надо, код открыт на github. Напиши в личку адрес, я вам отправлю версию, которая запускается под правами пользователя и не требует повышения привилегий.

    Reply
  52. Lyolik

    Серверная часть не устанавливается на WIN 10 x64. Просит .NET Framework

    Клиентская часть тоже ругается.

    Reply
  53. ifal

    (52) Именно так и написано в пункте Состав, без .net не будет работать. В системе есть хоть какая-нибудь версия .NET? По идее должна быть.

    Reply
  54. StiVitS

    Привет! Ты замутил супер штуку, аналог дорогостоящим программам. У меня несколько вопросов ну и они же соответственно и пожелания.

    1. Не мог бы ты доработать клиентскую часть чтобы ее можно было устанавливать как службу.

    2. Если клиент это служба тогда не спрашивать разрешения на подключение

    3. Добавить список контактов.

    Reply
  55. ifal

    (54) Никак руки не доходят, отчасти поэтому и выложил исходный код на github

    Reply
  56. StiVitS

    ОК! И на этом огромное тебе спасибо!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *