Проблема

Имеем - ферма Xendesktop 7.6. VDA версии 7.6.300 и более ранних. В ферме опубликовано приложение explorer.exe, в котором открывается папка с ярлыками других приложений.

Возможны два варианта проблемы. Первый - при попытке запуска на сервере появляется сессия пользователя, которая сначала Logging on,затем Connected, потом на несколько секунд переходит в состояние Active (или не переходит), а потом сразу Logging Off. Без каких бы то ни было сообщений об ошибках. На сервере XenApp в журнале только два сообщения TdICA с кодами 1004 и 1007.

В журналах Citrix Reciever никаких ошибок нету. Глюк проявляется как на Windows, так и на Linux, а также тонких клиентах (Wyse и HP). На любых версиях Citrix Reciever (13 и 4.3.xxx), а также CitrixOnlinePlugin (версии 12.3 и других).

Второй вариант - сессия висит на сервере, но приложение в ней не запускается.

Что помогло мне при решении первой проблемы

Если сессия сразу закрывается, а в журнале только события 1004 и 1007, то делаем так. В моем случае помогло остановка и выключение некоторых служб. В первую очередь нужно остановить и выключить - Portable Device Enumerator Service. Также хорошо бы выключить Net.Msmq Listener Adapter, Net.Pipe Listener Adapter, Net.Tcp Listener Adapter и Net.Tcp Port Sharing service.
Также Есть важный параметр в реестре. Написано тут:
http://discussions.citrix.com/topic/307554-sometimes-nothing-happes-after-starting-and-connecting-with-citrix-client/
По-умолчанию, таймаут запуска приложения - минута. Но иногда этого мало. Вероятная причина - задержки при логине на контроллере домена.
Решение описано у Citrix. Только нужно ставить длинный таймаут - минут 5.
На терминальном сервере в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI
создаем параметр
Name: ApplicationLaunchWaitTimeoutMS
Type: REG_DWORD
И даем ему значение 300000

Решение второй проблемы пустых сессий

В моем случае причиной того, что explorer.exe запускается, но окна не видно и сессия кажется “пустой”, стала невозможность корректной обработки logon-скриптов Windows, в которых прописано подключение сетевых дисков.
В структуре предприятия несколько доменов и при входе пользователей не из того домена, где размещены серверы, ресурсы, прописанные без указания FQDN не могли смонтироваться.
Помогло указание в свойствах сетевого подключения корректных DNS-суффиксов. Без DNS-суффиксов, указанные в скриптах пути к ресурсам не резолвились и скрипты не могли корректно отработать, а окно explorer.exe не появлялось.

Всё, что написано ниже, может рассматриваться как часть Best Practices, но решением проблемы не является!!!

Что рекомендует Citrix

Citrix рекомердует открывать не explorer.exe, а Internet Explorer. То есть примерно так:

C:\Program Files\Internet Explorer\iexplore.exe -extoff "file://d:/path to folder"

Решение от Citrix

Вот тут написнао что публиковать Explorer.exe нехорошо:
http://support.citrix.com/article/CTX922603

Вот тут описаны варианты решения с помощью AutoIt: http://support.citrix.com/article/CTX131423 Фактически запускается Internet Explorer, затем explorer.exe, и потом Internet Explorer закрывается.

Вот тут не всегдя работающее решение с помощью правки реестра: http://support.citrix.com/article/CTX128009 http://support.citrix.com/article/CTX138069 http://support.citrix.com/article/CTX127883

В двух словах. В реестр на сервере Citrix Xenapp добавляем пару параметров:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI

Name: ApplicationLaunchWaitTimeoutMS
Type: REG_DWORD
Data: <required additional time-out, in milliseconds>

Note: Specifying a value of less than 10000 reverts to 10000 because 10 seconds is the minimum override.
Method 2

И вот такой:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI

Value Name: LogoffCheckerStartupDelayInSeconds
Type: REG_DWORD
Value: An integer that denotes the time to wait for the application to start (10 Hexadecimal recommended)

Note: Setting this value also increases the time it takes for a user to log off the server.

Я сделал такой reg-файлик для всех серверов:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI]
"ApplicationLaunchWaitTimeoutMS"=dword:00004e20
"LogoffCheckerStartupDelayInSeconds"=dword:00000015

Также есть такие рекомендации, котрые в моем случае не сработали: 1. Изменить строку запуска приложения на C:\Windows\explorer.exe /n ,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
2. Запускать Internet Explorer (“C:\Program Files (x86)\Internet Explorer\iexplore.exe” “C:\”) вместо explorer.exe “C:\”. Такой вариант также не привел к желаемым результатам. Часто окно Internet Explorer открывалось, но оставалось полностью белым (даже без кнопок).

Альтернатива Explorer.exe

Также во тут: https://community.spiceworks.com/topic/541368-issues-with-publishing-windows-explorer-citrix-xenapp-6-5-and-windows-2008-r2 сообщают об успешной публикации вместо Explorer.exe заменителя - Explorer++.exe: https://explorerplusplus.com/
Он действительно выглядит как обычный explorer, но заметно шустрее и компактнее. Настраивается с помощью файлика .xml. Утащил к себе: explorer_1.3.5_x64.zip, explorer_1.3.5_x86.zip

Запуск explorer.exe при помощи скрипта vbs

Вот тут описано как с помощью скрипта vbs запускать один скрытый процесс и следом за ним какой-то другой http://www.norskale.com/articles/article/publish-and-application-that-needs-explorer-exe

' -------------------------------------------------------'


Const strComputer = "."
Const HIDDEN_WINDOW = 0
Const VISIBLE_WINDOW = 1
Const MyInitialProcess = "notepad.exe"
Const MyApp = "calc.exe"
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!" & strComputer & " ootcimv2")

Main()

Sub Main
    On Error Resume Next
    Err.Clear
    MyPID = StartExProcess(MyInitialProcess,False)
    wscript.sleep 100
        objShell.run MyApp , 1 , True
    wscript.sleep 100
    TerminateExProcess MyInitialProcess,MyPID
End Sub

Function StartExProcess (sProcessName,Visible)
    On Error Resume Next
    Err.Clear
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    Select Case Visible
        Case True
            objConfig.ShowWindow = VISIBLE_WINDOW
        Case False
            objConfig.ShowWindow = HIDDEN_WINDOW
    End Select
    Set objProcess = GetObject("winmgmts:rootcimv2:Win32_Process")
    errReturn = objProcess.Create(sProcessName, null, objConfig, intProcessID)
    StartExProcess = intProcessID
End Function

Sub TerminateExProcess(sProcessName,sProcessID)
    On Error Resume Next
    Err.Clear
    strProcessName = Right(sProcessName, len(sProcessName) - instrrev(sProcessName, ""))
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & strProcessName & "'")
    For Each objProcess in colProcessList
        if objProcess.ProcessID = sProcessID then
            objProcess.Terminate()
        end if
    Next
End Sub


' -------------------------------------------------------'

Открываем папку с помощью rundll32.exe

Также открывать папки можно с помощью вызова rundll32. Примерно так:

rundll32.exe url.dll,FileProtocolHandler "d:\Path to folder"

Итак. Публикуем приложение со следующими параметрами:
Path to executable:

%SystemRoot%\SysWOW64\rundll32.exe

Command Line Parameters:

url.dll,FileProtocolHandler "d:\Path to folder"

Working Directory:

%SystemRoot%
Enter your comment. Wiki syntax is allowed:
 
  • citrix/опубликованное_приложение_сразу_закрывается_сессия_без_процессов.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1