- PVSM.RU - https://www.pvsm.ru -

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp

Все чаще и чаще мы стали выводить свои программы в облака. Хорошо это или плохо — рассуждать не станем, но вот о ситуации, когда необходимо состыковать локальные программы с облачными, мы сегодня с вами немного поговорим: в разрезе нашей СЭД Docsvision и установленного локально на пользовательский ПК любого почтового клиента. Представим себе задачу: открыть ссылку на «карточку» Docsvision, которая пришла по почте пользователю в почтовый клиент, установленный локально на его компьютере. Изучив вопрос, проанализировав опыт наших партнеров, мы нашли решение, которым и хотим с вами поделиться.

Главным клиентским ПО в Docsvision является Navigator, который можно опубликовать как Remote App. На это могут быть разные причины: к примеру, слабый канал из удаленного подразделения до сервера Docsvision. Облачно, быстро для пользователя, удобно для админа. Но что происходит в случае описанной выше задачи, когда нужно отрыть ссылку на «карточку» из почтового клиента, установленного у пользователя локально на компьютере.

Давайте немного поясним, что происходит в такой конфигурации по умолчанию. Пользователь получает письмо с ссылкой на объект Docsvision, пытается по ней перейти, у него открывается локально установленный браузер и… вот тут начинаются проблемы, т.к. ссылка у него не открывается из-за того, что сервер Docsvision не доступен. Пользователь негодует и строчит заявки в службу ИТ. В последнее время вопрос «как решить эту проблему?» все чаще звучал от администраторов системы.

Суть нашего решения в следующем

Ссылка на объект в Docsvision формируется в определенном виде. При вызове этой ссылки на клиентском компьютере срабатывает скрипт, который открывает RemoteApp и преобразует её в стандартную ссылку на объект Docsvision, которая открывается браузером по умолчанию в RemoteApp. Таким образом, у нас запускается Docsvision Navigator на удалённом рабочем столе.
Конечно, данное решение не претендует на единственно правильное, но мы точно уверены, что оно рабочее и применяется в решениях, в которых активных пользователей более 4 000.
Делиться будем в виде пошаговой инструкции.

Пошаговая настройка
1. Создаем VBS скрипт с содержанием.

On Error Resume Next

Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

Dim regEx

if WScript.Arguments.count >0 then
               Arg =  WScript.Arguments.Item(0)
               Set regEx = New RegExp                          
               regEx.Pattern = "^dv5term://(.*)"            
               regEx.IgnoreCase = True                       
               arg = regEx.Replace(arg, "$1")                  
               WshShell.Run "http://" & arg

end if

2. Публикуем созданный VBS скрипт как RemoteApp на сервере, к примеру, с названием «docsvision5-link».

Заходим в RemoteApp Manager и выбираем “Add Remote Programs”.

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 1

В открывшемся “RemoteApp Wizard”, следуя инструкции, публикуем VBS-скрипт

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 2

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 3

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 4

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 5

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 6

3. Даем опубликованному приложению «docsvision5-link» разрешение на выполнение всех команд командной строки.

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 7

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 8

4. Создаем RDP файл для приложения docsvision5-link, в Remote App Wizard (пример RDP файла- dv5link.rdp).

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 9

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 10

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 11

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 12

5. Распространяем сознанный Rdp файл на клиентские рабочие места.

6. На клиентском компьютере создаем ветку Реестра dv5term с помощью файла с расширением .reg, который содержит записи:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTdv5term]
@="URL:dv5term Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOTdv5termshell]
@=""

[HKEY_CLASSES_ROOTdv5termshellopen]
@=""

[HKEY_CLASSES_ROOTdv5termshellopencommand]
@=""mstsc" /remotecmdline:"%1" "\\serverRDP\DocsVision\dv5link.rdp""

7. Меняем формирование ссылки, которая формируется сервером на карточки, на вид dv5term://server.docsvision.com/DocsVision/?CardID={1007DDE2-76E0-E511-80CA-A0D3C1063571}

Что будет происходить при таких настройках:

Пользователь кликает по ссылке:

dv5term://serverRDP.docsvision.com/DocsVision/?CardID={1007DDE2-76E0-E511-80CA-A0D3C1063571}

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 13
Выполняется ассоциированная в реестре команда:

"mstsc" /remotecmdline:"%1" "\serverRDP.docsvision.comDocsVisiondv5link.rdp"

т.е. \ serverRDP.docsvision.com DocsVisiondv5link.rdp с передачей в него параметра в виде полного URL

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 14
Вызывается скрипт с этим же параметром:

\serverRDP.docsvision.comC$scriptie5.vbs %1

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 15

Этот скрипт:

On Error Resume Next
 
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
 
Dim regEx
 
if WScript.Arguments.count >0 then
            Arg =  WScript.Arguments.Item(0)
            Set regEx = New RegExp                          
            regEx.Pattern = "^dv5term://(.*)"            
                                          regEx.IgnoreCase = True                       
            arg = regEx.Replace(arg, "$1")                  
                                          WshShell.Run "http://" & arg
 
end if

«Сим-Сим, откройся!», или как открыть ссылку через RemoteApp - 16

преобразует параметр:

dv5term://serverRDP.docsvision.com/DocsVision/?CardID={1007DDE2-76E0-E511-80CA-A0D3C1063571}

в

serverRDP.docsvision.com/DocsVision/?CardID= [1]{1007DDE2-76E0-E511-80CA-A0D3C1063571}

обычной заменой и делает вызов

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run http://serverRDP.docsvision.com/DocsVision/?CardID={1007DDE2-76E0-E511-80CA-A0D3C1063571} 

Т.е. пытается выполнить команду стандартным для системы путем, а если точнее, то будет пытаться открыть браузером, по умолчанию, на терминальном сервере ссылку serverRDP.docsvision.com/DocsVision/?CardID= [1]{1007DDE2-76E0-E511-80CA-A0D3C1063571}

Повторимся, данное решение, не претендует на единственно правильное. Возможно, у вас есть еще какие-то решения этой задачи?

Будем рады, если поделитесь!

Кирилл Хохлов, старший консультант «ДоксВижн».

Автор: ДоксВижн

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/se-d/251191

Ссылки в тексте:

[1] serverRDP.docsvision.com/DocsVision/?CardID=: http://serverRDP.docsvision.com/DocsVision/?CardID=

[2] Источник: https://habrahabr.ru/post/325018/