【发布时间】:2016-10-24 09:41:26
【问题描述】:
我目前正在开发 Web 应用程序和 Windows 应用程序之间的集成,在标准设置下一切正常。但是,将 Citrix 引入方程式会使一切变得相当复杂。
目前的解决方案
目前,我们有一个 POC(概念证明)运行自定义 Uri Scheme registration 到我们开发的一个小 exe 和 listing active instances with Global Atom (using this trick to list search all entries)。这样,我们可以查看我们的应用程序的实例是否正在运行。如果是,we call it via SendMessage,如果不是,我们在一个新进程中启动应用程序,并等待它准备好,以便我们调用它。
Citrix 引入的问题
现在,当使用 Citrix 桌面会话时,我们不怀疑会遇到任何问题,但是使用应用程序会话 (AKA XenApp) the Citrix documentation states: "URL redirection works only for desktop sessions, not application sessions.",因此我们的实施遇到了障碍。综上所述,我们现在在完成以下步骤时遇到了问题:
- 注册自定义 URI 方案处理程序:可能根本不支持。我们现在使用它的方式,它指向磁盘上的一个应用程序,但该应用程序安装在服务器上。
- 检测实例是否正在运行:我们不知道在此设置中是否可以使用 Global Atoms,而且我找不到任何关于此的文档。
- 使用 SendMessage 调用 XenApp 窗口:在运行我们可以重现的最简单的 XenApp 配置时,we can inspect the hosting process and get the handle to our application,但应用程序永远不会收到发送给它的消息。
在当前解决方案范围内解决
是否可以在 Citrix 环境中使用应用程序会话来完成上述场景?如果是这样,怎么做?到目前为止,我执行的测试似乎证实了我的怀疑,即此设置根本不支持它。
以类似的方式解决它
我们开发的 POC 简单且模块化,可以轻松实现更改实例的定位和通信方式,并可根据客户的特定设置进行配置。然后它将需要其他方式来检测、启动和与主应用程序通信。
- Just detecting a running application has proven difficult (another question hat has not yet been answered),而 Global Atoms 方法似乎不起作用。
- 在应用程序未运行时启动应用程序,这是我几乎放弃的事情,考虑到应用程序可以在这样的设置中分发多少种不同的方式,因此可能必须要求应用程序是已经在运行了。
- 即使I can retrieve what the handle is for the mainwindow,我也无法在 Citrix 设置中使用 SendMessage。它根本不处理我发送给它的消息。这也是 XenApp 不支持的吗?我找不到有关此的任何文档。非常欢迎调用托管应用程序的替代想法。
【问题讨论】:
标签: c# .net windows citrix uri-scheme