9

アプリケーションに非常に基本的なライセンス機能を実装しようとしています。シリアル番号は、マシンごと (またはオペレーティング システムごと) またはユーザーごと (Windows Server の CAL の場合: アプリケーションが 1 台のマシンで複数のユーザーによって使用されている場合、または複数のマシンで 1 人のユーザーによって使用されている場合) に付与されます。機械)。

  1. オペレーティング システムごとのライセンスには、Win32_OperatingSystemSerialNumberを使用します。

  2. ユーザーごとのライセンスについては、次のものを使用します。

    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
    if (currentIdentity != null)
    {
        SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid;
        Console.WriteLine(userSid);
    }
    

取得した OS シリアル番号または SID のハッシュは、データベースに格納され、アプリケーション シリアルに関連付けられます。プログラムが起動するたびに、サーバーにクエリを実行し、OS SN/SID のハッシュとアプリケーション シリアルを送信します。

それを行うのは正しいことですか、それとも完全に間違っていますか? すべての Windows マシンで動作しますか? (たとえば、マザーボードのシリアルを使用するのは間違っています)

4

1 に答える 1

3

同様のアプローチが職場で使用されているのを見たので、あなたのアプローチに問題はないと思いますが、マシンのライセンスには OS S/N とハードウェア ID の組み合わせを使用しています。私たちのアプリにはユーザーごとのライセンスがないため、それについてアドバイスすることはできません.

WMI によって返される値が特定の形式であると想定しないでください ( Win32_OperatingSystemは問題ありませんが、ハードウェアの ID は必ずしも問題ありません)。

ハードウェア ID を受け入れるコードが特定の形式を想定しており、コンマやスペースなどの英数字以外の文字の存在を考慮していないというバグに遭遇しました。

于 2010-04-29T02:35:00.413 に答える