1

私たちのアプリケーション (ドキュメント管理システム) では、2 つのアプリケーションが同じデータを見続けるために、画面の変更が通知される (または他のプログラムに画面の変更が通知される) ことになっています。元のファックスのドキュメント ビューア。フルフィルメント アプリは vb6 で作成され、ドキュメント マネージャーは .net 3.5 (c#) で作成されています。ターミナル サーバー上で実行されるため、セッションに対応している必要があります。ドキュメント ビューアーまたはフルフィルメント アプリを最初に開いて、どちらか一方を使用せずに両方を使用することができます。IPC の最良の方法は何ですか?

4

3 に答える 3

2

Vista または Windows 7 で実行できるようにしたい場合、IPC の最適な形式は TCP になります (Winsock コントロールを使用して VB6 から非常に簡単に実行できます)。

これの利点は、2 つのアプリが同じユーザーとして実行されていなくても通信できることです (Vista 以降では、SendMessage または名前付きパイプでは通信できません)。覚えておく必要がある唯一のことは、ブロックされないようにファイアウォールにルールを設定することです。これは、インストーラーで次のように実行できます。

netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable
于 2009-03-19T14:01:17.227 に答える
1

クリスの答えはおそらく最善の策ですが、ターミナルサーバーで健全性を維持するには、おそらくクラッジが必要になるでしょう.

「サーバー」アプリとして機能させたいアプリケーションで、未使用のポートを開き、それを表示して「クライアント」アプリに入力することができます。おそらく環境変数を利用することさえあります。ニーズによっては、このアプローチがすべて間違っている可能性があります。

単純に 2 つのアプリがあり、一方が変更されたときに一方に通知する必要がある (そして実際に何が変更されたかは通知されない) 場合は、おそらく Windows メッセージを送信してフックすることでそれを行うことができます。

于 2009-03-20T18:03:07.440 に答える
1

名前付きパイプとメールスロットは、依然として利用可能な最良の選択肢の一部であり、クロスユーザーおよびクロスプロセスで機能します. もちろん、Vista 以降では、さまざまな整合性レベルで実行されるプロセスに問題があり、ファイル セキュリティと同様に、以前の OS にもセキュリティが適用されます。

TCP は同じマシン内では常に非常に遅く、おそらくプロセス全体で WM_COPYDATA よりもさらに遅くなります。

パイプまたはメールスロットを使用すると、セッション ID を名前の一部にすることでターミナル サービスを処理できます。TCP は常にポート番号の制限された「名前空間」に挑戦します (0 から 65535 までの名前のファイルしか持てないハード ドライブを想像してみてください。各接続には 2 つのポート番号が必要です)。

于 2009-03-26T13:23:34.223 に答える