问题标签 [xenapp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
citrix - 如何调试 Citrix ICA 错误“已达到会话限制”?
对于有些模糊的信息,请提前道歉。我是 Citrix XenApp/XenDesktop 技术的新手,我只是在寻找通用的故障排除信息。
在我的工作地点,我们有配置为连接到 SaaS Web 应用程序的信息亭。这些信息亭安装了 Citrix XenApp 或 XenDesktop。
其中一个图标启动 IE 浏览器,该浏览器使用预配置的用户帐户连接到 SaaS 应用程序。但是,有时系统不会启动浏览器,而是显示“已达到会话限制。请联系您的系统管理员。” 错误如下图所示。
管理这些信息亭的人员认为此消息来自 SaaS Web 应用程序,但该应用程序并未对在给定时间内为给定帐户打开多少会话实施任何限制。
还考虑到 Citrix XenApp/XenDesktop 的工作方式,我认为(但也许我错了)如果 SaaS 应用程序确实拒绝了用户登录,我们将在 Internet Explorer 中显示一条错误消息,而不是这个 ICA 提示。
所以我认为这里的问题可能是消息不是关于后台 SaaS 应用程序的登录会话,而是关于 Citrix 会话或以前的 IE 浏览器以某种方式在后台运行(?)
然而,我们公司的 Citrix 团队对此进行了查看,并注意到在显示此提示时“Citrix 仍处于活动状态”。然后得出的结论是,Citrix 因此不是这里的原因。
所以我想在这里问一些问题,关于我可以认为是什么原因,以及我可以从哪里开始研究这个问题。
这适用于 XenApp / XenDesktop 7.18。
我的问题:
- XenApp / XenDesktop 是否有可用于调试此类问题的日志文件?
- 是否可以让 XenApp / XenDesktop 在调试模式下运行(将更多详细信息输出到日志文件)?
- Citrix 是否具有可能导致其出现此类问题的配置设置?
c# - 向 citrix 客户端驱动程序发送消息
我从这里下载 SDK SDK。vdovern 自定义虚拟通道客户端/服务器项目成功运行。现在我想在 c# 应用程序和 vdovern.dll(citrix 客户端驱动程序)之间进行通信。
[SendMessage] API 用于从 c# 应用程序向 citrix 客户端驱动程序发送消息。但是 sendmessage API 需要 HWND。
如何获取窗口句柄(citrix 客户端驱动程序)以将消息从 c# 应用程序发送到 vdovern.dll(citrix 客户端驱动程序)?
有没有其他方法可以向 citrix 客户端驱动程序发送消息?
谢谢,
powershell - 列出所有运行 4 小时的断开连接的会话并注销它们
我正在创建一个关于如何列出所有运行了 4 小时但代码不起作用的断开连接的会话的脚本。
没有显示错误消息,也没有显示结果。
但是当我运行时:
这是工作。
在这里需要一些帮助。谢谢。
remote-access - Citrix:输出模式有什么区别
在 Citrix 中有四种可用的输出模式:
- 输出模式正常
- 输出模式无窗口
- 输出模式无渲染
- OutputModeNonHeadless
使用 Simulation API 时,我看不到 OutputModeNormal 和 OutputModeWindowless 之间有任何区别。
从文档中,我希望 OutputModeWindowless 在客户端不显示任何窗口,但无论我做什么我都会得到窗口。
这是预期的,如果是的话,真正的区别是什么?
我搜索了很多但没有成功:
powershell - 即使遇到重新启动,也继续执行 powershell 脚本
所有,我正在尝试编写一个脚本来更新远程机器上的程序,但是升级需要一次或两次重新启动。当我运行powershell脚本时,它会触发升级并且机器重新启动一次,重新启动后升级不会恢复,除非任何用户帐户登录到机器;发布用户登录后,升级会自动恢复,并且升级过程会触发另一个重新启动帖子,升级完成。
有没有办法做到这一点?下面是我正在尝试的。
Invoke-Command -ComputerName $name -ScriptBlock { Unblock-File 'C:\temp\Install\VDAServerSetup_1912.exe'; Start-Process -FilePath C:\temp\Install\VDAServerSetup_1912.exe -ArgumentList '/components VDA', /disableexperiencemetrics, /enable_hdx_ports, /enable_hdx_udp_ports, /enable_real_time_transport, /enable_remote_assistance, '/includeadditional "Citrix Personalization for App-V - VDA"','/exclude "Personal vDisk","Machine Identity Service"', '/includeadditional "Citrix Personalization for App-V - VDA"', '/logpath "c:\becnet\xenapp"', /masterimage, /quiet, /virtualmachine, /disableexperiencemetrics, /optimize, /virtualmachine -wait}
我删除了复制代码,因为该部分工作正常。我面临的问题是,一旦在远程机器上触发了上述代码,机器就会作为升级的一部分重新启动,但是一旦机器备份,除非有人登录机器,否则升级就会卡住。有没有办法可以在无人看管的情况下实现?
正如下面拉里所指出的,我在启用自动登录方面取得了成功,但是我想使用该方法作为最后的手段,还有其他方法可以实现吗?
powershell - 用于重命名网络共享中的配置文件文件夹的 Powershell 脚本工具
我是 Powershell 脚本的新手,需要一些有关创建脚本的指导。
我们有终端服务器环境,我们必须定期重置用户配置文件,以便为他们解决与应用程序相关的问题。目前,我们手动将用户配置文件文件夹重命名为 .old,这会强制配置文件服务在用户下次登录时为其创建新配置文件。我们正在考虑创建一个基于 powershell 的工具来为一些非技术领域的优先用户执行此操作。
目前我们有一个用户,根据用户连接到的区域(亚洲、美洲),他在不同的文件共享中具有不同的配置文件。我正在寻找一个脚本,它首先从所有区域文件共享中加载文件夹(出于性能原因),然后是一个用于选择亚洲或美洲区域的列表框,以及一个用户名搜索框。该脚本应仅在所选区域中搜索用户名配置文件文件夹。
我发现只有一点点,需要帮助构建休息
winforms - ApplicationSettingsBase.Save:无法将配置保存到文件
什么可能导致 ApplicationSettingsBase.Save 失败并出现错误“无法将配置保存到文件”?
除了 user.config,该文件夹还包含另一个名为 a2rx2s4u.newcfg 的文件。运行应用程序的用户可以完全控制该文件夹。
该应用程序在带有 Citrix XenApp 的 Windows 2019 服务器上运行。
我已经使用 Sysinternals Process Monitor 记录了应用程序的活动。据我了解,该应用程序尝试将 a2rx2s4u.newcfg 重命名为 user.config 替换现有的 user.config,这似乎失败了:
来自 Process Explorer 的堆栈跟踪:
不幸的是,我手头没有 32 位 Windows,而且由于应用程序是 x86,Process Explorer 无法解析符号。
堆栈跟踪包含“Sfrhook.dll”可能很有趣,它是“Citrix 特殊文件夹挂钩 DLL”。我认为这个 DLL 在 Citrix 中实现了特殊文件夹重定向。
根据 Windows 错误代码参考,错误代码 0xC0000369 表示 STATUS_INVALID_DEVICE_OBJECT_PARAMETER:
设备对象参数不是有效的设备对象,或者未附加到文件名指定的卷。
我不明白这一点 - 重命名的源和目标在同一个目录中。
如何进一步缩小这个问题?
[EDIT1] 用户配置文件似乎驻留在 FSLogix 配置文件容器中: https ://docs.microsoft.com/en-us/fslogix/configure-profile-container-tutorial
使用 Profile Container 时,应用程序和用户都可以看到配置文件,就好像它位于本地驱动器上一样。
[EDIT2] 我们现在有另一个客户遇到同样的问题。这次:没有 Citrix,但“Windows 10 Enterprise 多会话” - 也使用 FSLogix 配置文件容器。 https://docs.microsoft.com/en-us/azure/virtual-desktop/windows-10-multisession-faq
citrix - Microsoft.Web.WebView2 / .NET Framework 4.8 WinForms 应用程序 + 已发布应用程序运行时错误 (REGDB_E_CLASSNOTREG)
我们正在使用 XenApp:7.6。我们有一个 .NET 完整框架 4.8 WinForms 应用程序作为 Citrix Receiver 中的已发布应用程序。此已发布应用程序托管在 Windows Server 2008 R2 SP1(64 位)计算机上。我们的应用程序使用 Microsoft.Web.WebView2 (1.0.824-prerelease) Web 浏览器 Winforms 控件在我们的应用程序中提供嵌入式 Web 浏览器。
当在用于交付已发布应用程序的同一 Windows Server 2008 R2 SP1 服务器上作为常规桌面应用程序运行时,我们的应用程序可以正常工作。在 Windows 10 和 Windows Server 2012 上作为常规桌面应用程序运行时,我们的应用程序也可以正常运行。
当我们通过 Citrix Receiver 将我们的应用程序作为已发布的应用程序启动时,当 Microsoft.Web.WebView2 Winforms 控件尝试创建 webview2 环境时,我们会在运行时看到 REGDB_E_CLASSNOTREG 错误。您可以在下面看到运行时异常...
在启动已发布的应用程序时在服务器上使用 ProcMon 我可以看到我们的应用程序最终调用了 C:\Program Files (x86)\Microsoft\EdgeWebView\Application\89.0.774.54\EBWebView\x64\EmbeddedBrowserWebView.dll 我相信那时启动 msedgewebview2.exe 进程。我们可以看到 msedgewebview2.exe 可执行文件正在为已发布的应用程序成功启动。下面显示了传递给 msedgewebview2.exe 的命令参数...
C:\Program Files (x86)\Microsoft\EdgeWebView\Application\89.0.774.54\msedgewebview2.exe" --embedded-browser-webview=1 --user-data-dir="C:\Users\Admin\AppData\Roaming\OurAppName\EBWebView" --no-default-browser-check --disable-component-extensions-with-background-pages --no-first-run --disable-default-apps --noerrdialogs --embedded-browser-webview-dpi-awareness=0 --disable-features=msEdgeOnRampFRE,msEdgeOnRampImport,msEdgeMGPFrev1,msEdgeSettingsImport,msEdgeSettingsImportV2,msReadAloud,msSyncEdgeCollections,msApplicationGuard,msEdgeTranslate,msEdgeReadingView,WebPayments,msSendClientDataHeader,msSendClientDataHeaderToEdgeServices,msImplicitSignin,SpareRendererForSitePerProcess --disable-popup-blocking --enable-features=ForwardMemoryPressureEventsToGpuProcess --internet-explorer-integration=none --js-flags="--harmony-weak-refs-with-cleanup-some --expose-gc" --winhttp-proxy-resolver --mojo-named-platform-channel-pipe=26740.36688.8089883041949745853
我尝试过的事情
- 我使用 ProcMon 来识别在将我们的应用程序作为已发布的 Citrix 应用程序启动时加载的所有 CLSID,并验证所有 32 位和 64 位 CLSID 都存在。我还尝试在 System32 和 SysWOW64 文件夹中使用 RegSvr32 重新注册一些 DLL
- 我使用 ProcMon 来识别正在加载的所有依赖项并验证这些依赖项是否存在。我结合使用 ProcMon 和依赖遍历器来验证所有 DLL 是否存在。
- 我已经通过“dcomcnfg”和“mmc comexp.msc /32”验证了所有 COM 权限都是正确的
- 在这里尝试了所有步骤https://support.microsoft.com/en-us/topic/-access-denied-errors-and-applications-with-com-activation-fail-after-installing-july-2018-security-and -quality-rollup-updates-for-net-framework-fd3d7a3f-ca2f-6e87-c409-a5652175cf40(Diasymreader.dll CLASSNOTREG)
- 尝试安装多个 Windows 更新,包括 2018 年 8 月安全和质量汇总 - 运行已发布应用程序的 Windows Server 2008 R2 SP1(64 位)操作系统似乎是最新的。
- 在端点/客户端机器上尝试了不同的屏幕分辨率、颜色深度
- 尝试在服务器上为我们的可执行文件设置各种兼容模式,禁用高 DPI,直接合成等
- 在禁用调试标志的情况下尝试了 x64 和 x86 版本构建 - 没有 PDB
- 添加了检查以确保我们的应用程序在提升的管理员上下文中运行
- 在 app.config 配置/启动元素中尝试 useLegacyV2RuntimeActivationPolicy="true"
- app.config 元素中尝试的 runtime/loadFromRemoteSources 元素
- 确保应用程序。清单存在以与 UAC 一起正常工作
- 检查服务器上的本地安全策略(我看不到任何明显的问题)
- 尝试嵌入式 WebView2 运行时(x64 和 x86)
- 尝试从https://developer.microsoft.com/en-us/microsoft-edge/webview2/安装和下载专用 WebView2 运行时(x86 和 x64 版本)
- 在运行已发布应用程序的服务器上安装了最新版本的 Edge
- 将 msedge.exe、msedgewebview2.exe、msedgewebview2 添加到以下每个注册表项以禁用 Citrix 挂钩...
- HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\CtxHook\ExcludedImageNames
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\CtxHook64\ExcludedImageNames
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\CtxUvi\UviProcessExcludes
主要区别
当通过 Citrix Receiver 门户将我们的应用程序作为已发布的应用程序启动时,与常规桌面应用程序不同,我们通过 ProcMon 看到了以下主要区别...
- 我们看到对注册表的调用以定位以下 CLSID(通过常规桌面应用程序启动时我们看不到这些调用)......
- 60A417CA-F1AB-4307-801B-F96003F8938B - 主机对象助手
- 9BA05972-F6A8-11CF-A442-00A0C90A8F39 - 外壳文件夹查看路由器
- 0A29FF9E-7F9C-4437-8B11-F424491E3931 - NDP SymBinder CorSymBinder_SxS / 基于直径的 SymReader (diasymreader.dl / mscoree.dll)l
- FAE3D380-FEA4-4623-8C75-C6B61110B681\Instance - WindowsCodecs.dll
- 0E25DC18-9F5E-48B1-80B3-D124E81B773B ColourTransformer (%SystemRoot%\system32\windowscodecsext.dll)
- 05AF94D8-7174-4CD2-BE4A-4124B80EE4B8
- 7835EAE8-BF14-49D1-93CE-533A407B2248
- 7ED96837-96F0-4812-B211-F13C24117ED3
- ABE3B9A4-257D-4B97-BD1A-294AF496222E
- AC757296-3522-4E11-9862-C17BE5A1767E
- 我已验证上述 CLSID 中引用的 DLL 存在于 System32 和 SysWOW64 中
- 我们看到 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\diasymreader.dll 中的 PDB 符号读取器正在加载。
- 在访问任何文件之前,我们会在 HKU.Default\Software\Citrix\SessionSfr\10 处看到对注册表的调用
- 我们的应用程序在端点上的 WFICA32.EXE 进程下运行,该进程是一个 32 位进程。我们看到我们的应用程序在服务器上作为一个常规的 64 位进程在属于本地管理员组的域用户下运行。
笔记
- 虽然我们拥有完全的管理员权限,并且我们的 Winforms 应用程序在本地管理员的上下文中运行,但托管已发布应用程序的 Windows Server 2008 R2 SP1 服务器位于域上,并且应用了各种组策略。
- Windows 防火墙在托管已发布应用程序的 Windows Server 2008 R2 SP1 服务器上完全禁用
在这个阶段,我不确定下一步该尝试什么。我真诚地欢迎社区内的 Citrix 专家提出任何建议。
提前感谢您提供的任何建议或帮助。
目前最好的祝愿,
瑞安
python - Python XenAPI 失败
我写了这段代码,但我得到了这个错误:
ConnectionRefusedError:[WinError 10061]
我关闭了代理,也许还有另一个用于连接和使用 Citrix 的库。我想制作一个脚本来测试在 Citrix 中打开应用程序,并获取不起作用的应用程序列表。