Доступен исходный код.
Назначение:
Удаленная консультация пользователей по интернету. Будет полезна на стадии внедрения разработок, когда необходимо достаточно часто консультировать пользователей по функционалу приложения, а так же в период сопровождения клиента.
Состав:
Программный продукт состоит из двух частей:
- серверная часть, работающая в качестве службы на Windows (SetupService.exe);
- серверная часть для операционной системы CentOS (rh_server);
- клиентское приложение (Удаленная консультация.exe), выполняющее соединение и управление.
Для работы приложений необходимо .NET Framework 2.0 и выше, что уже предустановлено в ОС Windows. Версия сревера для Linux реализована на golang.
Серверная часть
Windows
Приложение устанавливается как служба «Сервер удаленной консультации», после установки службу необходимо запустить вручную. Служба работает на 45823 порту и ведет лог в журнале приложений. Ограничение на количество одновременно работающих пользователей 50 клиентов. Никаких привязок клиентов к компьютеру нет. Служба принимает следующие параметры командной строки:
- port — номер порта, на котором будет работать служба, пример port=80;
- 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. Пример запуска рассмотрен в связанной статье.
Клиентская часть
Взаимодействие между консультантом и пользователем осуществляется через клиентскую часть. Подключение к клиенту выполняет по номеру, который автоматически выдается при подключении к серверу. Номер к клиенту не привязывается. Из одного приложение можно выполнить подключение к одному клиенту. Клиентских приложений можно запустить неограниченное количество.
При клиентском взаимодействии можно управлять клавиатурой, мышью, обмен файлами и буфером обмена. Других функций нет. Функция обмена файлами поддерживает только обмен файлами за одну операцию.
Настройка качества передаваемого изображения представлена в двух вариантах настройках канала связи:
- нормальный (изображение с палитрой 8 bit). Данный вариант рекомендуемый;
- отличный (изображение с палитрой 16 bit).
Программа не сохраняет параметры подключения, для этого необходимо использовать параметры запуска. Эти же параметры можно использовать и при интеграции с 1С:
- ip – указывает сервер для подключения, пример, ip=localhost
- url — адрес страницы на доступном сайте, которая возвращает строку с адресом сервера для подключения, например, url=mysite/server. Возвращаемая строка должна иметь следующий вид:ip=myserver. Параметр ip имеет приоритет на url.
- client – параметры, указывает, что приложение запускается на клиенте, при этом все элементы на форме неактивны и по окончании сеанса, клиентское приложение закроется автоматически. Пример, client=true;
- palette — определяет размерность палитры передачи данных, напрямую зависит от качества канала связи. Возможные параметры 8, 16. Пример, palette=8.
- resolution — определяет разрешение экрана, на которое будет отображаться экран клиента. Используются для сжатия изображения для более удобной работы. Нижнее ограничение 1024×768, верхнее ограничение — это исходное изображение экрана клиента. Пример, resolution= 1440×900
- mouse — определяет отрисовывать ли курсор клиента или нет. Если параметр не установлен, то курсор клиента отрисовывается. Если значение false, то все изменения в состоянии курсора клиента отражаются на стороне консультанта в его текущем курсоре, то есть оба управляют одним курсором. Пример, mouse=false. По умолчанию значение параметра true.
- mouse_move — определяет передавать ли данные о движении курсора на клиент. При низкоскоростном канале отключение данного параметра уменьшит нагрузку на канал связи. Пример, mouse_move=false. По умолчанию значение параметра true, то есть данные о движении курсора передаются.
- 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. Улучшение производительности передачи данных.
Используется mirror драйвер для захвата изображения?
Нет. Обычный gdi. Этого достаточно для консультации при работе с 1С. Скорости хватает на 8bit изображении на современных компьютерах, основное замедление будет вносить задержка сети при обращении к серверу (ping)
Киллер Тимвьювера!
Никто вам не мешает покупать профессиональные программные продукты с широким спектром функционала. Моя утилита практически бесплатна и для конкретной узкой задачи.
(4) так я же только за! Дорабатывайте свой продукт и выходите на рынок. Мы все от этого только выиграем.
Кто хостит проброс vpn тунеля?
(6) 1cmax, ПО состоит из двух частей: сервера и клиента, где будет стоять сервер и поверх чего будет работать не важно лишь бы его ip и порт были доступны для клиента.
Глупый вопрос — а зачем в 1С что-то добавлять? Без этого разве нельзя? И еще вопрос — а у клиента тоже NET Framework 2.0 нужен?
(8) prestige, кажется не обязательно в 1С добавлять, а можно просто сделать ярлык для запуска и прописать там, например, «D:Rh.exe ip=74.125.77.147 client=true»
(8) prestige, добавив в 1с, удобно пользоваться. Можно и не добавлять. У клиента тоже должен быть . NET 2.0 и выше, но это не проблема он уже предустановлен или его более старшая версия и есть на Win XP.
+, добавить бы еще масштабирование и полноэкранный режим, но для начала неплохо )
(11) cj512, Спасибо. Утилиту делал для себя и предполагалось, что разрешение экрана у разработчика (консультанта) не хуже чем у клиентов, так и было, поэтому вопрос с масштабированием не стоял, но сделать можно.
Обновление сборки, версия 1.1 (описание в основной статье).
Обновление сборки, версия 1.2 (описание в основной статье)
Удобная штука, но иногда, при подключении к клиенту вижу только черный экран, когда закрываю окно, у клиента остается висеть процесс жрущий 100% ядра.
(15) AlexB., Обновил сборку, скачайте, по идее вам оттуда нужен только клиент. Есть кое-какие изменения, по удобству работы, например, рабочее окно сразу работает в режиме масштабирования, изменяя размер окна, картинка подстраивается пропорционально изначальным размерам изображения.
Обновление сборки, версия 1.3 (описание в основной статье)
Программный код открыт ? или есть возможность получить исходники программы?
(18) Гость, программный код закрыт, пока не открываю.
защиту гилевских курсов можно обойти это супер программой?)
(20) m.s.moiseev, назначение программы описано в первом абзаце, для других вещей лучше использовать специализированные программы.
(16) Помогло, спасибо, отличное решение для сопровождения своих клиентов.
Периодически отваливается управление мышкой и клавиатурой в удаленном сеансе, возможно дело в нестабильной связи. Картинку я вижу нормально, вижу все что пользователь делает, но сам не могу управлять.
(23) AlexB., На последних версиях с параметрами уменьшающими нагрузку на канал описанная вами проблема наблюдается?
Здравствуйте. Очень хорошее дело делаете. Подскажите пожалуйста, на какой порт происходит соединение с клиентом? Я так понял порт указываемый в программе относится к серверу, а на какой порт идет подключение к клиенту? Или я ошибаюсь?
(25) MORT32Ram, Весь обмен данными идет по порту, который указан на сервере, по умолчанию 45823, соответственно клиент открывает этот порт отправляет и получает данные по этому порту. Обычно фаерволами закрываются разные нестандарные порты, поэтому на сервере вы можете указать скажем 80 порт и соответственно на клиенте будет использовать тот же порт, как это указать в статье написано, если все-таки не получается настроить, то я готов помочь, пишите в личку.
(26) Все работает, программа отличная, тестируем, юзаем. Единственное это передача файлов, так и не получилось передать клиенту файл 1cv8.cdn у которого содержимое текст, просто обрывается, ошибок никаких не выдает.
(27) MORT32Ram, Действительно при передачи файла, если возникает ошибка, то программа просто сбрасывает передачу. Это практически всегда связано с ошибкой доступа к файлу, например, не хватает прав или еще что-то. В данном случае, 1Cv8.cdn — это файл блокировки файловой базы 1С, и программа удаленной консультации не может получить к нему доступ на чтение.
(28) Конкретно в тот момент 100% проблема не с доступом, перекидывать пробовал со своего компа на клиентский, что бы выгнать пользователей из файловой базы. Наверное было бы немного удобнее если бы выводилось хотя бы краткое описание ошибки.
Учту на будущее.
Отличнейшая утилита, уже всем офисом юзаем. Неожиданно работает очень шустро и стабильно, по ощущениям стабильнее некоторых коммерческих программ. Респект автору.
(31) MORT32Ram, Спасибо. Справедливости ради стоит отметить, что выигрыш может идти из-за того, что ваш сервер к вам ближе и уменьшает задержку передачи данных по сети.
(32) Многие клиенты достаточно далеко. Но вообще, безусловно, это тоже влияет.
А еще бы было хорошо сделать инсталлятор для клиентов, который настраивает клиенту адрес сервера. При запуске в поле сервер стоит локалхост, а нужно бы предустановленнный сервер в интернете или п локальной сети
(34) Zmey_72, сейчас это можно сделать только через задания параметров запуска приложения ip = нужный адрес, на скриншотах есть пример.
Геннадий день добрый! попробовал вашу демо версию клиента Удаленной консультации — изображение вижу отлично а мышкой ничего сделать не могу. в чем может быть проблема. связь отличная.
(36) возможно, что на клиенте жесткая политика безопасности, и, например, UAC запрещает эмулировать мышь. Чтобы это проверить попробуйте на клиенте от имени администратора запустить.
Разработка очень интересная и думаю будет востребована. Но есть над чем работать.
Предложения по улучшению:
1. добавить в настройки параметр по автоматическому подключению к клиенту. Т.е. на данный момент выходит вопрос про разрешение на подключение.
2. при использовании в удалённых рабочих столах работает до тех пор, пока сам rdp активен и имеет визуальное отображение на экране. как только стол сворачиваем, управление становится не возможным
3. на мой взгляд самое значительное: при запуске любых приложений где требуется подтвердить выполняемое действие (контроль учетных записей) изменений на экране не видно и как следствие нет возможности подтвердить или отменить запуск
4. было бы не плохо организовать простой текстовый час с удалённым компом
5. не понятно есть ли передача комбинаций клавиш, ну например ctrl+alt+break. если нет — то тоже нужно
Удачи в разработке!
В догонку: если мы речь ведем про поддержку 1С, то почему бы не добавить возможность использования в качестве внешней, нативной компоненты
(38) Спасибо за содержательные комментарий! Этого не хватает =)
Все описанные вам пункты понятны, кроме 5-ого, так как это должно работать.
То, что вы отметили, это уже не просто консультация клиента (скачал, запустил и закрыл программу), это полноценное администрирование удаленного компьютера (кроме 4-ого пункта), тут требования к безопасности программы жестче, а так же обязательна будет нужна установка программы в качестве службы и работы от системной учетной записи.
По поводу компоненты, в том контексте использования, что изначально реализовывал, это не даст никакого выигрыша. Но если рассматривать со стороны построения целой сети клиентов, то есть вы внедряете компоненту клиенту, которая активируется при запуске конфигурации. В итоге вы видите у себя, как обслуживающей организации, целую сеть клиентов, причем в разрезе Организаций, конфигураций и т.д. с возможностью подключения к каждой. Тогда конечно это имеет смысл. Такие пожелания у меня записаны, но на реализацию нужно время.
Сейчас я двигаюсь немного в другом направлении: передача звука, возможность организовать конференцию.
Проект очень интересный. Подскажите исходный код где-то опубликованпланируется?
(41) Исходный код не опубликован, но мысли такие есть.
(42) Будем ждать… если можно киньте в лс.
Выложен исходный код, ссылки в основной статье.
(44) Спасибо, будем изучать…
(45) Спрашивайте, по мере возможности, буду отвечать
есть ли проблемы при включенном UAC ?
(47) На последней версии при запуске требуется повышение прав до уровня администратора, чтобы можно было без проблема производить установку ПО или системные настройки менять. При необходимости могу выложить версию (или сами соберите проект, исходный код доступен), которая запускается с правами пользователя, этого все равно будет достаточно для консультации в 1С.
ясно , спасибо этой версии достаточно
Добрый день. У клиентов при запуске, просит права администратора. как быть?
(50) Есть такой момент, при необходимости вы можете пересобрать проект как вам надо, код открыт на github. Напиши в личку адрес, я вам отправлю версию, которая запускается под правами пользователя и не требует повышения привилегий.
Серверная часть не устанавливается на WIN 10 x64. Просит .NET Framework
Клиентская часть тоже ругается.
(52) Именно так и написано в пункте Состав, без .net не будет работать. В системе есть хоть какая-нибудь версия .NET? По идее должна быть.
Привет! Ты замутил супер штуку, аналог дорогостоящим программам. У меня несколько вопросов ну и они же соответственно и пожелания.
1. Не мог бы ты доработать клиентскую часть чтобы ее можно было устанавливать как службу.
2. Если клиент это служба тогда не спрашивать разрешения на подключение
3. Добавить список контактов.
(54) Никак руки не доходят, отчасти поэтому и выложил исходный код на github
ОК! И на этом огромное тебе спасибо!