I'm planning on releasing some licensed software as well. Licensing is all up to you. One copy per server, per user, per processor, etc.
If you want to make the user register for a key or not is up to you as well. The bad thing about keys in .NET is that they can be easily cracked. .NET isn't compiled to machine code, so anyone can view your source. The only way that I could see around it is if you also implemented a web service that validates the keys, that way the keys are not hard coded into the application. But then you have to deal with things like how often do you want to check that the key is valid, what if they don't have internet connection, etc.
You could use obfuscation to make the code a little harder to read, but there is no way to completely hide anything in it.
As for strong naming, it depends on what version of Visual Studio you are using. If VS 2003, then open the Visual Studio 2003 Command Prompt and run "sn.exe -k c:\whateverlocation\KeyName.snk". Then in the AssebmlyInfo.cs file add "[assembly: [assembly: AssemblyKeyFile("..\\..\\KeyName.snk")]"
If you are using VS 2005, then just go to Project > Properties > Signing. Check the Sign the Assembly box and choose <New...>. Remember to add it to the Assmebly file.
You may have already known all that and were looking for something more in depth, but that's about all I've learned about the two since trying to create my own product. If you come across any more (or better) information, let me know.
Thanks!
Ron Wheeler