多くの最新のソフトウェア会社と同様に、私の会社ではプロダクトキーを使用して、ユーザーがソフトウェアに対してどのような契約を結んでいるかを確認しています。プロダクトキーを解析するときに、誰かが持っている製品の種類(試用版/フルバージョンなど)を確認できます。ユーザーがコードライブラリの無料バージョンから有料バージョンにアップグレードできるようにし、プロダクトキーが有効かどうかを確認する試用版が必要です。
試用版には、フルバージョンのすべてのコードが含まれているわけではありません。プロダクトキーはアルゴリズムを使用してチェックされるため(Webサービスなどは使用されません)、非常に高速に実行できます。
ここには2つのサブ問題があります。
- 試用版からフルバージョンへの移行。MSIアップグレードでこれを解決することを考えていますが、これをどのように達成できるかわかりません。(WIXを使用)
- 試用版かどうかを確認するための追加コードを含む試用版ビルドを作成します。これは#ifステートメントを使用して可能であることは知っていますが、DLLを変更することも可能かどうか疑問に思っています。より正確には、試用版をチェックするすべての型に静的コンストラクターを追加します。
私の質問は次のとおりです。これはこれを行う正しい方法ですか?もしそうなら、この種の機能を実現するための標準的な方法(またはツール)はありますか?そうでない場合、これを行うための最良の方法は何ですか?
アップデート
これまでのすべての素晴らしい答えに感謝します。答えから判断して、コンテキストの詳細を説明するときが来たと思います。幸い、私たちは多かれ少なかれ正しい方向に進んでいるようです。
私たちの製品では、プライベート(インターネットに接続されていない)VLANにインストールするのが理にかなっているので、プロダクトキーを使用することができます...そして私は本当に「電話のアクティベーション」のようなトラブルに行きたくありませんマイクロソフトはそうしました:-)。したがって、提案されているように、私は現在、データのビットを暗号化するプロダクトキーを使用しています。このキーは、特定の製品に対してキーが有効かどうかを確認するために復号化されます。確かに、私はソフトウェアの著作権侵害の被害者になる可能性がありますが、今のところそれを「マーケティング手段」と見なすと思います。
回答の1つで示唆されているように、私は現在、複数のMSIファイルを生成しています。1つはx64用で、もう1つはx86用です。そして、試用版、フルバージョン、ブループリントバージョン用に1つ。これにより、合計6つのMSIファイル(pfff)が作成されます。プロセスの難読化中に、強力な命名とコード署名が行われます。ブループリントバージョンには、完全なソースコードが含まれています。
私はトライアルビルドについてかなり心配しています。もちろん、あちこちにチェックを追加することはできますが、すべてのクラスに自動的にチェックを入れたいと思います...すべてのCSファイルをコピーし、静的なc'torを追加/変更することを考えました(f.ex. cecilまたはnrefactoryを使用する..またはいくつかの正規表現を使用する...)。これを望んでいるのは私だけではないように思えます。もっと良い方法が必要ですよね?
さらに、MSIホイールを再発明しているように見えるので、更新やアップグレードについては本当に考えたくありません。試用版からフルバージョンへの移行は、MSIアップグレードのように思えます。フルバージョンからブループリントバージョンへの移行は、MSIアップグレードのように感じられます。しかし、通常のアップグレードと組み合わせると、これが可能かどうか心配ですか?