私は現在、Web アプリと Windows アプリケーションの統合を開発しています。ここでは、すべてが標準のセットアップで正常に動作します。ただし、Citrix を方程式に導入すると、すべてがかなり複雑になります。
現在の解決策
現時点では、開発した小さな exe へのカスタムUri スキーム登録を使用して POC (概念実証) を実行し、Global Atom を使用してアクティブなインスタンスを一覧表示しています(このトリックを使用して、すべてのエントリを一覧表示します)。このようにして、アプリケーションのインスタンスが実行されているかどうかを確認できます。そうである場合はSendMessage を介して呼び出し、そうでない場合はアプリケーションを新しいプロセスで開始し、準備が整うまで待機して呼び出します。
Citrix で導入された問題
現在、Citrix デスクトップ セッションを使用する場合、問題が発生することはないと思われますが、アプリケーション セッション (別名XenApp )の場合、Citrix のドキュメントには、「URL リダイレクトはアプリケーション セッションではなく、デスクトップ セッションでのみ機能します」と記載されています。、そのため、実装でレンガの壁にぶつかりました。要約すると、次の手順を実行する際に問題が発生しました。
- カスタム URI スキーム ハンドラーの登録: まったくサポートされていない可能性があります。現在の使用方法では、ディスク上のアプリケーションを指しますが、アプリケーションはサーバーにインストールされます。
- インスタンスが実行されているかどうかの検出: このセットアップでグローバル アトムが可能かどうかはわかりません。これに関するドキュメントを見つけることができませんでした。
- SendMessage を使用した XenApp ウィンドウの呼び出し: 再現可能な最も単純な XenApp 構成を実行すると、ホスティング プロセスを調べてアプリケーションへのハンドルを取得できますが、アプリケーションは送信されたメッセージを取得しません。
現在の解決範囲内で解決する
上記のシナリオは、アプリケーション セッションを使用して Citrix 環境で実現できますか? もしそうなら、どのように?これまでに実行したテストでは、このセットアップではサポートされていないという私の疑いが確認されたようです。
同様の方法で解決する
私たちが開発した POC はシンプルでモジュール式であり、インスタンスの配置方法や通信方法の変更は簡単に実装でき、クライアント固有のセットアップに合わせて構成できます。次に、プライマリ アプリケーションを検出、起動、および通信するための別の方法が必要になります。
- 実行中のアプリケーションを検出するだけでは困難であることが証明されており (別の質問への回答はまだありません)、Global Atoms アプローチは機能していないようです。
- アプリが実行されていない場合にアプリを起動することは、そのようなセットアップでアプリを配布できるさまざまな方法がいくつあるかを考えると、私はほとんどあきらめていることです。
- mainwindowのハンドルを取得できますが、Citrix セットアップでも SendMessage を使用できません。私が送信しているメッセージを単に処理しません。それも XenApp がサポートしていないものですか? これに関するドキュメントが見つかりませんでした。ホストされたアプリケーションを呼び出す別のアイデアは大歓迎です。