C#2008 SP1
選ばれた数の顧客に提供したいアプリケーションを書いています。
トレイル期間(1か月)後にアプリケーションが機能しなくなるように使用するのに最適なソリューションは何ですか。
彼らがソフトウェアの購入に興味を持っているなら、アプリケーションのロックを解除するために、ライセンスキーか何かを彼らに与えると思っていました。
私は自分で仕事をしているので、予算は非常に限られています。それで、これを行う無料のサードパーティ製品はありますか?
日付ベースのアプローチを採用する場合、ユーザーが日付を元に戻すことで回避できます(ただし、これを頻繁に行うとは思えません)。別の方法は、アプリケーションが期限切れになる前に特定の回数だけ開始できるようにすることです。このアプローチは明らかに日付の変更を無視します。
私が好む方法は、プログラムの通常の使用には重要であるが、その評価には重要ではないアプリケーションの部分を無効にすることです(たとえば、作業を保存する機能など)。私は自分のソフトウェアでこれを行い、プログラム全体を購入したときに、コンピューターに固有のロック解除コードを送信します。このアプローチの主な利点の1つは、インストールされたデモが永久に潜在的な販売ツールとして機能することです。私はむしろ、自分のプログラムを常にある程度機能させたいと思っています。「申し訳ありませんが、このプログラムの有効期限が切れました」というメッセージが多くの売り上げを生み出しているとは思いません。
あなたのオプション:
インストール時にレジストリに何かを書き込んで、後で見つけて削除するのが難しいようにします。このようにして、アプリケーションは、最初にインストールされた日時と、今でも機能するか停止するかを認識します。レジストリが適切にクリーンアップされているか、OSが再インストールされている場合、この方法は失敗します。
ある種のオンライン検証サービスを使用します。[1]の欠点がなくなります。また、OSのインストールを超えたアプリケーションアクティビティを監視することもできます。これを機能させるには、ユーザーPCを何らかの方法で一意に識別し、その署名をサーバーに送信する必要があります。
これは、ユーザーが日付/時刻の設定で遊んだり、時計の日付をさかのぼったりするのを防ぐために私が行ったトリックです。
アプリを初めて実行するときは、レジストリで最初の実行日と終了試行日、および最後の実行日を暗号化します。また、アプリを実行するたびに、システムの日付ではなく、試用の終了日を復号化して確認します。このソリューションは、インターネットに接続していないユーザーに有効です。
インストール中にレジストリキーを書き込みます。キーには、インストールの日付が含まれます。レジストリキーの日付は暗号化する必要があります。
アプリケーションを起動したら、このレジストリキーの存在を確認してください。存在しない場合はアプリケーションを閉じ、そうでない場合は日付を復号化し、試用期間を確認し、試用が終了した場合はアプリケーションを閉じます。
最も簡単な解決策(および結果として最も簡単に回避できる方法)は、プログラムが最初にインストール(または実行)された日付をファイルに保存し、プログラムが起動されるたびに現在の日付と照合することです。差が30日を超える場合は、プログラムを終了します。
よりあいまいな場所やユーザーが改ざんしにくい場所(レジストリなど)に日付を保存することで、システムを迂回して使用する時間を増やすことが次第に難しくなりますが、停止することはありません。 PCで時計を巻き戻します。
サーバーに日付を保存し、サーバーから日付を取得する場合、これはより安全ですが、ユーザーがソフトウェアを使用するにはインターネット接続を開いている必要があることを意味します。