|
First, create a product worth stealing...
|
|
|
|
|
There are installations out there that all use the same product key, i.e. corporate installations and Ghosted copies. It's definately NOT a fingerprint for Windows.
|
|
|
|
|
Dave, thank you for your response. The app has a small (no corporate licenses) and vertical market and I just want to make it hard enough to beat the ubiquitous 'viral cd with magic markered key'. Users who beat Microsoft (if I understand ghosting), will certainly beat me. If you have pointers to another fairly easy way to protect small projects, or other insights, I'd appreciate it. thanks again
|
|
|
|
|
The way we did it, was to have an online license generator, which generates a response key. That key is then stored in a file, so we can check for it. It's a checksum based on their license key and a unique id generated from the machine processor, network card, etc. If the app requires the web, you could make it check online every time, but the core point is, our software is disconnected from the license keys ( we can just bulk produce DVDs ), but, each key we give out will only work for a certain number of machines, so your licenses are secure so long as no-one reverse engineers your app and removes the license check altogether.
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
was8309 wrote: Users who beat Microsoft (if I understand ghosting),
Ghosting is not a "beat" of Microsoft. it's actually a legitimate, and Microsoft supported, deployment method. Ghost itself is not supported by Microsoft, but the idea of it is.
was8309 wrote: If you have pointers to another fairly easy way to protect small projects, or other insights, I'd appreciate it.
I could tell you outright, but that would expose where I get my licensing data. I can tell you that I dig around in Windows and find data from various points, from the Registry to the Hard Drive to some rather not-so-well-known portions of Windows internals. You don't pickup a couple of points of data. You use as much as you can come up with. IIRC, I use some 18-20 points of data. Some of the data can be the same from machine to machine, but not all of it can be, even if the machine is ghosted. It all gets compiled into a nice little pacckage, encrypted, then sent to the licensing server. From there on, I really can't tell you what I do, for obvious reasons.
|
|
|
|
|
was8309 wrote: I would ask them to run a 'registration utility' that would display their Windows Product Key, and ask them to email it to me.
I don't think I would be too happy sending my Windows Product Key to a stranger.
|
|
|
|
|
From the other responses, it seems its common for apps to get all kinds of information from user's machines, but I see you point and so while I plan to try to implement the suggested solutions, I will not come right out and ask them to send any info. thanks
|
|
|
|
|
It would be better to hash the key before sending it, otherwise the keys could be stolen, and you don't really care about the key anyway - you're just using it to see whether it's "still the same key" which could also be done with hashes.
|
|
|
|
|
|
I want to create a c# winform application that creates & stores a list of tasks including date and status info. What are the options for storing my tasks. i read a little about serialisation and was considering that, is that a good idea ? What are the alternatives?
This is my first solo mini project aside from exercises in books, I would appreciate any help at all i'm looking for ideas and things to read up on mainly, all suggestions gratefully received.
|
|
|
|
|
SQL Server -- or any database.
Eventually you'll want to learn about reading and writing text and XML files so those are possibilities, but not as good.
|
|
|
|
|
Serialisation allows you to create a list of objects, then store that as a binary file, and restore it from there. It may be a good choice in this case, as it doesn't involve requiring a database, learning SQL, etc.
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
Serialization is the easiest option by far. It's built into .NET, and is almost automatic.
But if the format of what you're saving changes, it becomes way more complex to read data you've stored in the old format.
Another disadvantage of serialization is that is becomes very bloated, taking up many times as much space in the serialized XML files as the original data.
Another serialization disadvantage is that it's sometimes buggy and unreliable. Some things require complex workarounds (which you can find on the web), some things can't be serialized, and (surprisingly) some things can only be serialized some of the time.
Do some simple tests to see if it's adequate for what you want to store/retrieve.
|
|
|
|
|
Thanks for all your help, i think i will have a look at SQL & MSDE , i have a little experience with it . Serialisation sounds like it could get complicated quickly. Really impressed with the speed and detail in your replies guys i will certainly be using this site as a resource in future.
Cheers
|
|
|
|
|
Hi guys.
I'm using LINQ to modify a database.
I want to take a back up from the database.
Could you please guide me , how I can do it with LINQ ?
|
|
|
|
|
I think this would receive a better response if posted to the LINQ or Database forums.
|
|
|
|
|
Hey friends. I have been doing C# for over a year just with 3 months learning,with my effort and with the help of this forum. I knew the basics of C#. Specially windows From programmint with C#. But now I wanted to move to the next step.i.e I wanted to be as best as possible with Socket Programming,Web based programming with C# and so on . and know I wanted to buy a nice advanced C# book which will help me just for this start. I searched google and I got books but I couldnt see thier outline. So can you give me the books you know that are best for this purpose,if I can see the outline please . I hope every body will cooperate with that .
Thanks a lot.
|
|
|
|
|
You should read CLR via C#[^] by Jeffrey Richter.
"WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys | Onyx
|
|
|
|
|
Thank you for your responce ............ But i cant get outlines about Socket Programming from the table of contents.
So can you point me that one.Thank you
|
|
|
|
|
I found this article[^] here on Code Project. Not too far away really!
|
|
|
|
|
thank you man .... I will work on it. But to brief my idea i wasnt just to search a code (even if it helps) ... to have a detailed idea about Socket Programming and others I wish i had a nice book on that. Thank you.
|
|
|
|
|
CoderForEver wrote: I wish i had a nice book on that.
Sure, but sometimes you will find that the guy who wrote the article will know of one; you can always try to contact him via his article. Also just try a Google search on the subject and read some of the book reviews.
|
|
|
|
|
thank you for your responce
|
|
|
|
|
Hello all,
As you may know, in C# 3.0 and later we can add this kind of syntax to a class:
public class CMyClass
{
public int MyIntValue { get; set; }
}
The "get; set;" provides what MSDN documentation refers to as a "trivial" property. That is, there's no extra logic that needs to be applied to either the get or set part of the property. The compiler picks up on this syntax and auto-generates the underlying class member.
My question is: WHY IS THIS USEFUL??? If you have a property that has unrestricted get and set access, how is that any different than just declaring a public class member? Why do I need to waste the extra 13 keystrokes to type:
public int MyIntValue { get; set; }
instead of just:
public int MyIntValue;
To me this seems like an absolutely ridiculous syntax feature. Does anyone have any great insight into this?
|
|
|
|
|
Nothing, so go ahead and make the public field and enjoy the backward compatibility.
But! If you want the setter to have different (more-restricted) access than the getter, use an automatic property.
public int MyIntValue { get; protected set; }
Using the automatic property to begin with makes changing your mind later less problematic.
|
|
|
|