Глава 6. Публикация приложений

Использование Installation Manager для развертывания инсталляционных пакетов

Принудительная переустановка

Когда пакет заказан для размещения на целевом сервере, Installation Manager обнаруживает уже установленные пакеты. Если в пакете обнаружено приложение, Installation Manager не устанавливает его, в сообщает стстус “Already Installed.” (уже установлено). Если вам необходимо перезаписать приложение, установите опцию Force Reinstall в окне Properties уже инсталлированного пакета.

Взаимодействие с Load Manager и Application Publishing

Для развертывания пакетов Installation Manager в ферме используйте мастер публикации приложений. Этот мастер позволяет устанавливать, публиковать приложения и применять к ним распределение нагрузки. Если вы используете Installation Manager без мастера, приложения не будут автоматически публиковаться.

Деинсталляция

По умолчанию развернутый пакет можно деинсталлировать только оригинальным пакетом. Например, вы не можете деинсталлировать пакет ADF, имеющий статус “Already Installed.” Вместо этого сделайте другую инсталляцию с опцией Force Reinstall. Этот новый пакет можно использовать для деинсталляции такого же пакета. Приложения также можно деинсталлировать без Installation Manager, а с помощью Add/Remove Programs в Панели Управления.

Если вы деинсталлируйте пакет, имеющий статус “Already Installed” , целевой сервер не обнаружит деинсталляцию и будет продолжать говорить, что пакет все еще установлен.

Замечания к развертыванию приложений с Installation Manager 2.2

Публикация в доменах с тысячами объектов

MetaFrame XP Feature Release 2 протестирован в доменах с более чем 10,000 объектов в одном контейнере службы каталогов. При использовании MetaFrame XP в службе каталогов или доменах с большим числом объектов учитывайте следующее:

Перенаправление контента

С помощью Content Redirection вы определяете, какие приложения - удаленные или локальные - будет запускать пользователь и в каких ситуациях. Используйте редиректор контента для запуска приложений:

Более подробную информацию см. в "Руководстве администратора".

Редирект от клиента к серверу.

При использовании редиректа контента от клиента к серверу, пользователи ICA Win32 Program Neighborhood Agent открывают все файлы ассоциированного типа приложениями, находящимся на сервере MetaFrame XP server. Вы должны использовать NFuse Classic, чтобы позволить ползователям подключаться к приложениям через Агента.

Для очистки ассоциаций файлов, находящихся в реестре Windows, используйте утилиту ftacln, находящуюся на ЬetaFrame XP CD-ROM в каталоге Support\debug\i386.

Вы также можете использовать стандартную утилиту Microsoft ftype, перечисляющую все ассоциированные типы файлов.

Использование Windows Explorer

Если вы разрешили редирект контента, то команды контекстного меню в Windows Explorer работают иначе, чем в нормальной ситуации. Например, при щелчке правой кнопкой на файле команда Open открывает файл с помощью удаленного приложения на сервере MetaFrame XP.

Большинство команд контекстного меню Windows Explorer не затрагиваются, поскольку они не сконфигурированы в ключах, изменяемых MetaFrame XP Feature Release 2. MetaFrame переопределяет значения только в ...\Classes\<FileType>\shell.

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

Команда меню Поведение при включенном редиректе контента от клиента к серверу
Open Открывает файл с помощью опубликованного приложения, ассоциированным с данным типом
Open with...
[Set under
HKCU\Software\Microsoft\Windows\
CurrentVersion\Explorer\FileExts]
В некоторых случаях у вас может быть субменю с командой "PN Agent". При выборе этого элемента файл открывается опубликованным приложением, ассоциированным с этим типом файла.
Edit Локально не доступно, пока вы не разрегистрируетесь или не перезапустите Program Neighborhood Agent
Print Локально не доступно, пока вы не разрегистрируетесь или не перезапустите Program Neighborhood Agent

Редирект от сервера к клиенту

При включении редиректа от сервера к клиенту, встроенные ссылки (URL) перехватываются сервером MetaFrame и посылаются клиенту ICA по виртуальному каналу ICA Control. Для запуска URL используется локальный браузер пользователя. Пользователи не могут отменить эту особенность.
Например, пользователи могут часто использовать веб и мультимедийные URL. Если не включить редирект от сервера к клеинту, польователи будут открывать эти ссылки браузерами и медиа-плеерами, находящимися на сервере MetaFrame. Чтобы осовободить сервер от обработки такого рода запросов, вы можете переназначить запуск приложения, обрабатывающего поддерживаемые URL, с локального устройства клиента.

Аспекты редиректа контента от сервера к клиенту

Редирект контента от сервера на сервер

Включение редиректа от сервера к серверу позволяет пользователям получать доступ к информации посредством приложений, опубликованных н разных серверах MetaFrame XP. Пользователи, работающие с одним приложением на сервере MetaFrame могут открывать прикрепления с помощью другого приложения, опубликованного на другом сервере MetaFrame.
Для разрешения редиректа контента от сервера к серверу в должны установить Program Neighborhood Agent на все сервера MetaFrame XP, обслуживащие опубликованные приложения.

Для включения редиректа сервер-сервер

  1. Установите ICA Win32 Program Neighborhood Agent на серверы MetaFrame XP, обслуживающие приложения.
  2. Создайте скрипт в %WINDIR%\system32. Пример:
    REM ----- begin -----
    @echo off
    start C:\PROGRA~1\Citrix\PNAgent\PNagent.exe
    REM ----- end -------
    Убедитесь, что используется короткая запись и отстутсвуют пробелы.
  3. Добавьте этот скрипт в реестр:
    HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon.
    Укажите в AppSetup имя файла. Типичные значения для AppSetup могут включать
    “UsrLogon.Cmd,cmstart.exe,PNAgent.cmd.”
  4. Добавьте PNAgent.exe к списку исполняемых файлов, которые должны завершаться при выходе пользователя:
    HKLM\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI. Добавьте имя исполняемого файла в значение LogoffCheckSysModules.
Аспекты редиректа контента от сервера к серверу

Устарнение неисправностей

Content Redirection from Client to Server

Если вы встретили одно из следующих сообщений об ошибке, проверьте ваши настройки

Если вы подключились к веб-странице, содержащей внедренную ссылку на документ или UNC к ссылке (например, на таблицу Excel), редирект контента от сервра к серверу не будет работать и вам будет предложен диалог Open, Save as или Cancel.
Действие: Сохраните документ локально. После этого Program Neighborhood Agent запустит сеанс ICA и выведет содержимое файла в Excel.

Вы можете столкнуться со следующими сценариями:

Сценарий 1

  1. Опубликуйте Excel на сервере MetaFrame XP и ассоциируйте его с расширением .XLS
  2. Опубликуйте Internet Explorer, но не ассоциируйте его ни с каким расширением.
  3. Из клиента, выполняющего Program Neighborhood Agent, зарегистрируйтесь и запустите опубликованный Internet Explorer.
  4. Сохраните тип ".xls” на общем сетевом ресурсе и дайте пользователю права доступа к этому ресурсу.
  5. В Internet Explorer создайте ссылку на тип файла “.xls” , созданном на этапе 1.

Program Neighborhood Agent не открывает удаленный Excel для отображения файла. Вместо этого он предлагает выбрать Открыть, Сохранить как и Отмена. Сеанс ICA открывает Excel и выводит содержимое файла, если документ предварительно сохранен на локальном диске и затем запущен.

Сценарий 2
Редирект от клиента к серверу не перенаправляет ярлыки, размещенные на сетевом ресурсе. Например, если вы назначили букву драйва сетевому ресурсу и попытаетесь открыть файл с типом, ассоциированным с опубликованным приложением, файл не откроется в опубликованном приложении. Вместо этого вы получте сообщение что файл нельзя открыть. Если же открыть ярлык с локального диска, а не с сети, то файл открывается.

Сценарий 3
В некоторых случаях Citrix Management Console может сообщать о неверных ассоциациях с типами файлов для опубликованных приложений. Это происходит при использовании Notepad.exe в качестве опубликованного приложения и ассоциировании его с типом .txt

Сценарий 4
Редирект контента от клиента к серверу не работает корректно с файлами Adobe Acrobat Reader 4.0 (с раширением .pdf).

Поддержка редиректа в NFuse Classic 1.7

Чтобы приложения работали с Раширенной Публикацией Контента и Редиректом Контента, они должны быть способны понимать аргументы командной строки. Например, Notepad поддерживает UNC, но не поддерживает URL.

Для ассоциирования приложения с контентом, приложение должно быть правильно опубликовано. При публикации приложения в конце комадной строки следует указать символ процента и звездочку, например, C:\Program Files\Office\WINWORD.EXE “%*”.
Citrix Management Console в Feature Release 2 включает %* автоматически. Если не указать этого, то приложение запустится, но контент не откроется.

Использование скриптов веб-сервера

Этот раздел предназначен для пользователей, знакомых с написанием скриптов для Web и знакомых с объектами Java NFuse Classic.

Публикация контента использует новый метод findAppByExtension() на существующем объекте AppDataList object. Этот метод принимает адрес контента и просматривает список приложений в поиске того приложения, которое поддерживает этот тип контента. Например, если документ Microsoft Word опубликован в виде URL http://mywebsite/spec.doc, то следует использовать findAppByExtension(“http://mywebsite/spec.doc”).

Если приложение найдено, возвращается объект NFuse "App", описывающий опубликованное приложение. Это приложение затем может быть запущено посредством NFuse Classic, передавая в качестве параметра адрес опубликованного контента (в нашем примере http://mywebsite/spec.doc). Последние версии клиентов ICA (6.3 и более поздние) поддерживают спецификацию аргументов в командной строке используя настройку LongCommandLine (кроме ICA Java Client).

Основные шаги в написании скрипта:

  1. Получить список опубликованных приложений, доступных пользователю
  2. Найти приложение, ассоциированное с расширением контента
  3. Запустить приложение, сгенерировав файл ICA.

Пример на ASP

Получить список приложений
   Set credentials = Server.CreateObject("com.citrix.nfuse.ClearTextCredentials")
   credentials.initialize "user", "domain", "password"
   Set gateway = Server.CreateObject("com.citrix.nfuse.CitrixWireGateway")
   gateway.initialize credentials
   Set appList = gateway.getAppDataList()
   Найти приложение, ассоциированное с указанным типом
   Set contentApp = appList.findAppByExtension("http://mywebsite/spec.doc")
   Запустить приложение
   ' Создать объект TemplateParser (для генерации файла ICA)
   Set parser = Server.CreateObject("com.citrix.nfuse.TemplateParser")
   ' Настроить логин
   CookStr =
   "NFuse_User=user&NFuse_Domain=domain&NFuse_LogonMode=Explicit&NFuse_Password=password"
   ' Set these as cookie session fields
   parser.setCookieSessionFields(CookStr)
   ' Настроить опубликованное приложение на запуск контента
   urlSessionFields = "NFuse_Application=" & contentApp.getNameUrlEncoded    & "&NFuse_AppFriendlyNameURLEncoded=" & contentApp.getFriendlyNameUrlEncoded
   ' Set these as URL session fields
   parser.setUrlSessionFields(UrlSessionFields)
   ' Set the address of the content to use as a command line argument
   parser.setSingleSessionField "NFuse_AppCommandLine", "http://mywebsite/spec.doc"
   ' Specify the template ICA file to use
   parser.setSingleSessionField "NFuse_Template", "template.ica"
   ' Generate the content of the ICA file and return as MIME type "x-ica"
   ' This will cause the browser to launch the ICA file and hence the
   ' published application.
   If parser.Parse() Then
     Response.ContentType = "application/x-ica"
     Continue = True
     While (Continue)
     HtmlString = parser.getNextDataBlock()
     If Len(HtmlString) = 0 Then
       Continue = False
     Else
       Response.write(HtmlString)
     End If
     Wend
   Else
     ' Parser failed. Attempt to display the published content using
     ' local (client side) application.
     Response.Redirect(docURL)
   End If
 

Пример JSP

Obtain the List of Applications
   ClearTextCredentials credentials = new ClearTextCredentials();
   credentials.initialize("user", "domain", "password");
   CitrixWireGateway gateway = new CitrixWireGateway();
   gateway.initialize(credentials);
   AppDataList appList = gateway.getAppDataList();
   Locate the Published Application Using File Type Association
   App contentApp = appList.findAppByExtension("http://mywebsite/spec.doc");
   Launch the Application with the Content
   // Create a TemplateParser object (to generate the ICA file)
   TemplateParser parser = new TemplateParser();
   // Set up the launching credentials
   String CookStr =
   "NFuse_User=user&NFuse_Domain=domain&NFuse_LogonMode=Explicit&NFuse_Password=password";
   // Set these as cookie session fields
   parser.setCookieSessionFields(CookStr);
   // Set the published application to use for launching the content
   urlSessionFields = "NFuse_Application=" + contentApp.getNameUrlEncoded    + "&NFuse_AppFriendlyNameURLEncoded=" + contentApp.getFriendlyNameUrlEncoded;
   // Set these as URL session fields 
   parser.setUrlSessionFields(UrlSessionFields);
   // Set the address of the content to use as a command line argument
   parser.setSingleSessionField("NFuse_AppCommandLine", "http://mywebsite/spec.doc");
   // Specify the template ICA file to use
   parser.setSingleSessionField("NFuse_Template", "template.ica");
   // Generate the content of the ICA file and return as MIME type "x-ica"
   // This will cause the browser to launch the ICA file and hence the
   // published application.
   if (parser.Parse()) {
     String contentType = parser.getContentType();
     response.setContentType(contentType);
     boolean continue = True;
     while (continue) {
       String HtmlString = parser.getNextDataBlock();
       If (HtmlString.length() == 0) {
          continue = False;
       } else {
          out.println(HtmlString);
       }
     }
   } else {
     // Parser failed. Attempt to display the published content using
     // local (client side) application.
     response.sendRedirect(docURL);
   }
 

Пример файла Template.ica

   [Encoding]
   InputEncoding=ISO8859_1
   [WFClient]
   Version=2
   ClientName=[NFuse_ClientName]
   RemoveICAFile=yes
   [ApplicationServers]
   [NFuse_AppName]=
   [[NFuse_AppName]]
   Address=[NFuse_AppServerAddress]
   InitialProgram=#[NFuse_AppName]
   LongCommandLine="[NFuse_AppCommandLine]"
   DesiredColor=[NFuse_WindowColors]
   TransportDriver=TCP/IP
   WinStationDriver=ICA 3.0
   [NFuse_ClientLogon]
   [NFuse_SOCKSSettings]
   AutologonAllowed=ON
   [NFuse_Ticket]
   [NFuse_IcaAudio]
   [NFuse_IcaWindow]
   [NFuse_IcaEncryption]
   SessionsharingKey=[NFuse_SessionSharingKey] 

В начало