There is not a non-changing unique way of identifying a computer.
Microsoft, in their product activation scheme, uses the identify of a number
of various components, with the concept being that an user won't change more
than one or two items at a time. With network, video, and sound all being
built into the motherboard these days, I won't be surprise if you need to
reactivate Windows if your motherboard dies and needs to be replaced.
Each installation of Windows does have an unique ID that you might wish to
utilize. Of course, this value will change if the OS is every reinstalled
(like after a disk crash, or to get rid of spyware, etc.).
If all that you care about is that they are only running 20 copies, and
don't care much about tying the copies to any specific computer, you could
take an approach along this line: have each copy of your application create
an unique ID (i.e., a GUID) and report that number back to your webservice
whenever the application is running. Then, you really just have to monitor
to the total number of copies running at any one time.
Just some food for thought,
Richard Rosenheim
Kyle Abbott via .NET 247 said:
I am about to start selling a new .NET Windows application but I am having
a hard time deciding how to control licensing.
The application will be sold on a per machine basis. So someone can buy 20
copies and install it on 20 computers.
The application uses webservices and I would like the application to check
if it is authorized to run via a webservice each time it starts.