我目前正在开发 Web 应用程序和 Windows 应用程序之间的集成,在标准设置下一切正常。然而,将 Citrix 引入等式会使一切变得相当复杂。
目前的解决方案
目前,我们有一个 POC(概念证明),通过自定义Uri 方案注册到我们开发的一个小 exe,并使用 Global Atom 列出活动实例(使用此技巧列出搜索所有条目)。这样,我们可以查看我们的应用程序的实例是否正在运行。如果是,我们通过 SendMessage 调用它,如果不是,我们在一个新进程中启动应用程序,并等待它准备好,以便我们调用它。
Citrix 引入的问题
现在,当使用 Citrix 桌面会话时,我们不怀疑会遇到任何问题,但对于应用程序会话 (AKA XenApp ) ,Citrix 文档指出:“URL 重定向仅适用于桌面会话,不适用于应用程序会话。” ,因此我们的实施遇到了障碍。总而言之,我们现在在完成以下步骤时遇到了问题:
- 注册自定义 URI 方案处理程序:可能根本不支持。我们现在使用它的方式,它指向磁盘上的一个应用程序,但该应用程序是安装在服务器上的。
- 检测实例是否正在运行:我们不知道在此设置中是否可以使用全局原子,而且我找不到任何有关此的文档。
- 使用 SendMessage 调用 XenApp 窗口:当运行我们可以重现的最简单的 XenApp 配置时,我们可以检查托管进程并获取应用程序的句柄,但应用程序永远不会收到发送给它的消息。
在当前解决方案范围内解决它
上述场景可以在 Citrix 环境中使用应用程序会话完成吗?如果是这样,怎么做?到目前为止,我执行的测试似乎证实了我的怀疑,即此设置根本不支持它。
以类似的方式解决它
我们开发的 POC 简单且模块化,更改实例的定位和通信方式很容易实现,并且可以根据客户的特定设置进行配置。然后它将需要其他方式来检测、启动和与主应用程序通信。
- 仅检测正在运行的应用程序已被证明是困难的(另一个问题尚未得到回答),并且 Global Atoms 方法似乎不起作用。
- 如果应用程序没有运行,则启动应用程序,这是我几乎放弃的事情,考虑到应用程序可以在这样的设置中分发多少种不同的方式,所以它可能必须是应用程序已经运行的要求。
- 即使我可以检索 mainwindow 的句柄,我也无法在 Citrix 设置中使用 SendMessage。它根本不处理我发送给它的消息。这也是 XenApp 不支持的吗?我找不到有关此的任何文档。非常欢迎调用托管应用程序的替代想法。