4

私は小さなアプリケーションを持っています。これは個人使用には無料ですが、企業使用には有料ライセンスが必要です。

企業環境では、アプリケーションが複数のワークステーションで実行される可能性が最も高いです。フリーウェア版なら控えめなメッセージを表示したい。(そして続ける)

防弾である必要はありません。それが不可能な場合 (つまり、ファイアウォール)、アプリケーションは続行する必要があります。また、インスタンスを追跡するために、ユーザーにある種の中央サービスを設定させたくありません。ユーザーを困らせたくありません (特に有料ユーザーには迷惑をかけたくありません *g*)

この種の機能を実現する方法はありますか?

Dreamweaver の古いバージョンには、この種の機能があったことを覚えています。同じネットワークで複数回実行することはできませんでした。

4

4 に答える 4

4

1 つの方法: 特定のポートで UDP ブロードキャストをリッスンします。各インスタンスがこのポートでブロードキャスト UDP パケットをローカル ネットワークに送信できるようにします。アプリケーションがそのようなパケットを受信し、その構造を認識すると、他のインスタンスが実行されていることがわかります。

2 つの有効なライセンスが使用されている場合にメッセージを回避するために、ライセンスの詳細を含めることができます。

通常、ブロードキャストはルーティングされないため、これはローカル ネットワークでのみ機能します。(また、ユーザーはファイアウォールを介して完全に無効にすることもできます...ただし、53(DNS)などの標準ポートを使用する場合、ブロックされません)。

もう 1 つの方法は、世界中で実行中のすべてのインスタンスについて通知されるカスタム サーバーを使用することです ;-)

于 2009-02-14T18:46:22.607 に答える
3

これを実現するには、主に次の 2 つの方法があります。

まず、ネットワーク上の他のワークステーションと通信する各ワークステーションに小さなサーバー アプリケーションをセットアップできます (個人的には発見に Bonjour を使用しますが、他のオプションもあります)。ここでの欠点は、これを機能させるために、オプション 2 よりもかなり多くのコードを記述しなければならないことです。

2 つ目 (おそらくもっと簡単) は、WMI を使用して他のワークステーション上のプロセスを列挙し (ここでも、おそらく Bonjour のようなシステムを使用して検出します)、他のマシンで実行されているプロセスを見つけます。これの欠点は、列挙コードが検索を実行するためにすべてのマシンに対する特権を必要とすることです。

于 2009-02-14T18:46:11.470 に答える
3

アプリケーションが起動すると、特定のポートで UDP ブロードキャストを送信します。これはローカル サブネットに制限され、ファイアウォールを通過できない可能性があります。これは、「他の誰かが実行中ですか、それとも開始できますか?」です。クエリ。

応答がない場合、アプリケーションは通常どおり起動し、この UDP ブロードキャストをリッスンします。検出された場合は、"I'm already running; you can't start" パケットで応答します。

開始されたばかりのアプリケーションは、この応答パケットを受け取り、開始を拒否するか、(それほど厳密にしたくない場合は) ユーザーに警告を表示します。

同じネットワーク上で複数のライセンスを持つことができるように、製品 ID とライセンス キー (またはハッシュ) を最初の要求に含める必要があります。2 番目のユーザーが最初のユーザーを見つけて、アプリケーションを本当に使用する必要があるかどうかを尋ねることができるように、応答にはおそらくマシン名が必要です。

于 2009-02-14T18:54:26.940 に答える
0

邪悪な企業の解決策:
アプリケーションが起動するたびにホームにコールするようにします。ライセンスの複数のアプリケーションが起動する場合は、起動しないように指示します。インターネット接続がない場合は、まったく起動しないでください。

于 2009-02-14T19:15:49.573 に答える