インストールされたPCに依存する固有のIDを取得したいと考えています。
なにか良い方法をご存じの方は教えてください。
つまり、AというPCに、xというソフトを入れた場合、a'というIDを取得でき
その後、xを一度アンインストールして、Aへ再度入れなおしてもa'という
IDが再取得できます。
一方、BというPCに、xというソフトを入れた場合、取得できるIDはb'であり
B上からはa'のIDが取得できることはないようにしたいのです。
調べてみたら、Win32_OperatingSystemクラスを利用して取得できる
System.Management.ManagementObjectから、"SerialNumber"を呼び出すことで
それぞれ別のIDが取得できるように思えました。
しかし、共通項は見つけられていないのですが、xのログを調べてみると
PCによっては、"SerialNumber"から取得できる値は、空であるケースがあることに
気が付きました。
そこで、"SerialNumber"に代わるものはないか、知恵を借りたい次第です。
よろしくお願い致します。
※「そんなものはありません」という答えはコメント欄に記載してください。
回答に記載頂いた場合は、不適切な解答とさせていただきます。
MACアドレスが駄目なら、HDDのシリアル番号とかどうでしょうか。
http://www.google.co.jp/search?hl=ja&q=windows+HDD+%E3%82%B7%E3%...
トップから検索してVBでの取得方法のサンプルプログラムも見つかりました。
Win32_WindowsProductActivation の ProductIDプロパティにインストールされたWindowsのプロダクトキーが入っていますので、それをユニークキーにしてみてはいかがでしょう。
tasklightさん、ありがとうございます。
参考にさせていただきます。
今時ネットワークカードが無いPCというのは無いので、MACアドレスはどうでしょうか?
yossiy7さん、ありがとうございます。
コメント欄にも記載したのですが、ユーザがMACアドレスを修正できるケースもあるというのが問題ですね。
@IT:Windows TIPS -- Tips:ネットワーク・インターフェイスのMACアドレスを変更する
http://www.atmarkit.co.jp/fwin2k/win2ktips/356macaddr/macaddr.ht...
MACアドレスが駄目なら、HDDのシリアル番号とかどうでしょうか。
http://www.google.co.jp/search?hl=ja&q=windows+HDD+%E3%82%B7%E3%...
トップから検索してVBでの取得方法のサンプルプログラムも見つかりました。
yossiy7さん何度もありがとうございます。
今のところCPUの番号と、OSのインストール日時で対応していたのですが
HDDのシリアル番号も検討させて頂きます。
機械本体シリアル番号が取得できる場合は、それを使用する。
シリアル番号が取得できない場合はWindowsのプロダクトIDを使用するという処理でよいと思います。
同じソフトの同時起動を防ぐという程度の保護でしたら、USBメモリのシリアル番号をチェックする
ことでソフトウエアとUSBメモリをひもづけて置くという方法はどうでしょう。
yossiy7さん何度もありがとうございます。
今のところCPUの番号と、OSのインストール日時で対応していたのですが
HDDのシリアル番号も検討させて頂きます。