120

Windows 8用の新しいMetroスタイルのアプリを使用してUIフロントエンドを構築し、同じローカルマシン上のデスクトップで実行されている.NETアプリケーション(Windowsサービスアプリなど)と通信したい場合。

メトロアプリとデスクトップアプリの間で利用できるプロセス間通信の形式は何ですか?

VisualStudioチームのPavelMinaevに感謝します。彼は、コメントでいくつかの初期情報を提供してくれました。

Martyn Lovellによると、そのための意図的なメカニズムはなく、そのために使用できるメカニズムの一部は意図的に制限されています。たとえば、名前付きパイプはなく、メモリマップトファイルもありません。ソケット(サーバーソケットを含む)がありますが、ローカルホストに接続する場合、同じアプリにのみ接続できます。共有の「既知のフォルダ」(ドキュメント、画像など)の1つで通常のファイルを使用できますが、これはかなり大雑把なハックであり、ポーリングが必要であり、ユーザーに表示されます。--PavelMinaevがこの問題についてコメントしています

そのため、通常のアプローチに失敗すると、何らかの形の通信を行うためにWebサービスを使用したり、データベースの読み取り/書き込みを行ったりすることを考えていました。どちらも、プロセスが同じマシンで実行されている場合はやり過ぎのようです。

私がここで試みていることは理にかなっていますか?デスクトップで実行されている既存のサービスのフロントエンドUIとしてメトロアプリが必要であることがわかります。または、デスクトップで実行されているフロントエンドUI(つまり非メトロアプリ)にWPFを使用する方がよいでしょう。

4

8 に答える 8

54

現在、既存のプロジェクトをWin8に移植しています。これは、NamedPipesWCFを介して相互に通信しているWindowsサービスとトレイアプリケーションで構成されています。ご存知かもしれませんが、Metroは名前付きパイプをサポートしていません。全二重接続にTcpBindingを使用することになりました。

この投稿では、サポートされている機能について説明します。

Metroクライアントが使用できるWCFサーバーのサンプルはこちらです。

また、Metroでは同期WCFを使用できないことにも注意してください。非同期のみのタスクベースのラッパーを使用する必要があります。

そして、質問ありがとうございます。私は私にとって良い出発点でした:)

于 2012-02-21T07:28:10.970 に答える
38

私が参加した//build/セッションの最後に、このような質問がいくつかありました。全体像のセッションの1つを行った幹部であるAlešHolečekが聴衆から出てきて、それらを処理しました。C ++開発者でない場合でも、そのセッションをダウンロードしてQ&Aをご覧ください。http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C

Metroアプリは、マシンにインストールされているデスクトップアプリやサービスを信頼できません。また、デスクトップアプリは、いつでも一時停止できるため、実行中のMetroアプリを信頼できません。あなたは違った考え方を始める必要があります。これでAlešを聞いてください。

于 2011-09-19T02:51:05.540 に答える
11

Windows 8.1 Updateでは、WindowsストアアプリとC#for .NET 4.5以降で記述されたデスクトップコンポーネント間の通信が、エンタープライズシナリオのサイドロードアプリケーションで正式にサポートされるようになりました。

サイドロードされたWindowsストアアプリ用の仲介されたWindowsランタイムコンポーネント

引用するには:

重要なビジネス機能とルールが既存のソフトウェア資産に組み込まれていること、および企業には新しいアプリケーションスタイルの生産性が高いさまざまなシナリオがあることを認識し、Windows 8.1 Updateには、サイドロード用のブローカーWindowsランタイムコンポーネントと呼ばれる新機能が含まれています。アプリケーション。IPC(プロセス間通信)という用語を使用して、Windowsストアアプリでこのコードを操作しながら、既存のデスクトップソフトウェアアセットを1つのプロセス(デスクトップコンポーネント)で実行する機能を説明します。これは、データベースアプリケーションとWindowsでNTサービスを利用するアプリケーションが同様のマルチプロセスアーキテクチャを共有しているため、エンタープライズ開発者にとってなじみのあるモデルです。

このアプローチの実装は、最初は少し複雑ですが、Windowsストアとデスクトップコンポーネント間の緊密な統合が可能になります。当面は、WindowsStoreの公開認定に合格しないことに注意してください。

于 2014-08-25T12:50:51.380 に答える
5

プロトコルハンドラーを使用して疎結合されたMetroアプリを構築する方法についてのInfoQに関する記事あります。これはWindowsで長い間サポートされてきたものであり、デスクトップアプリケーションがプロトコルハンドラーとして登録され、メトロアプリケーションがこのメカニズムを介して通信できる可能性があります。

これが可能かどうかはわかりませんが、チェックしてみると面白いかもしれません。

于 2011-09-21T08:41:47.077 に答える
3

追加の手動cmd操作を行うことができると思われる場合は、次を試すことができます。

X:/> CheckNetIsolation.exe LoopbackExempt –a –n=<packageID>;

CheckNetIsolation.exeはwinRTインストールに含まれているため、追加でインストールする必要はありません。

私はそれを試しました:パッケージの更新後でも機能します。

に示されているように:http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx

ここでは、アプリのpackageIDを見つける方法について説明します:http ://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/82bad7d4-d52b-4731-a396-13ab9004c1cc/how-to-get- the-appid-of-a-metro-style-app-

于 2013-08-02T22:10:51.723 に答える
3

Christophe Nasarreは、ローカルファイルを使用してそれを行うためのかなりハッキーな方法についてブログに書いています。その結果、2つのアプリのUIを切り替えることなく、デスクトップアプリ/ Windowsストアアプリ(ブログではDA / WSAと呼ばれます)間の通信が可能になります。彼はまた、プロトコルハンドラーを含むもう1つのハッキーでないテクニックについてブログに書いています。

DAと通信するWSAを持つことは、ストアアプリの認定要件によって明示的に禁止されていることに注意してください

Windowsストアアプリは、ファイルやレジストリキーなど、ローカルメカニズムを介してローカルデスクトップアプリケーションまたはサービスと通信してはなりません。

...ただし、「ローカルメカニズム」のみを制限します。したがって、通信をルーティングするためのWebサービスを構築できると思います。

于 2013-10-22T07:31:47.263 に答える
2

ローカルサービスを使用して、Metroアプリからデスクトップアプリまで同じマシンで通信することが可能です。少し前に、ローカルサービスを使用してWinRTサンドボックスをバイパスする方法である単純な「概念実証」を実装しました。サービスをインストールするには、まだ何らかの「ソーシャルエンジニアリング」または直接ガイドが必要ですが、とにかく可能です。
このようなアプリをWindowsStoreに追加する際の、「ローカルサービス」通信に関する認定規則についてはよくわかりません。

こちらのサンプル

設計上、Metroアプリケーションは、WinRT APIと使用可能な機能のみを使用して、基盤となるPCに直接アクセスすることはできません。ただし、PCとそこにあるすべてのデータにアクセスするためのバックエンドサービスを作成すると、基本的にサンドボックスで実行されなくなります。

唯一の「問題」は、ユーザーがこのバックエンドサービスを手動でインストールする必要があることですが、「ソーシャルエンジニアリング」を使用しても問題はありません。ユーザーは「PCブラウザ」Metroアプリをダウンロードし、すべての写真、音楽、ビデオを閲覧できます。 、WinRT APIを使用しますが、アプリの下部にも「PCブラウザのパワーパックをダウンロードしてPC全体を無料で閲覧してください」というメッセージが表示されます。

ユーザーはWebページにリダイレクトされ、そこからユーザーはPC全体のファイルにアクセスするための「PCブラウザー」バックエンドサービスを含む従来のデスクトップインストーラーをダウンロードできます。このデスクトップサービスがインストールされると、Metroアプリはそれを検出し、PC全体を閲覧するために使用できます。ユーザーは満足していますが、WinRTサンドボックスが危険にさらされています。

もちろん、これはWindows8ARMタブレットでは機能しません。この回避策を使用すると、ウイルス対策、トレント/P2Pクライアントなどの従来のデスクトップアプリ用のMetroアプリクライアントを構築することも可能です。

于 2012-10-01T17:02:38.983 に答える
0

ポイントを逃したかもしれませんが、プライベートネットワーク機能をアクティブにすると、ローカルIPアドレス(ローカルホストではなく)を使用してローカルで実行されている(http)サーバーに接続できます。これにより、winrtアプリがwpfデスクトップアプリと通信するシナリオが可能になります

于 2015-10-25T12:18:41.593 に答える