I once found a very neat quote on the net that's very, very true for any online game:
The client is in the hands of the enemy.
As such, you can't really avoid people doing nasty things to your game client.
Due to this, don't trust the client at all, i.e. everything important should at least be verified server side (better: calculated there). If this is done properly, the player won't be able to do anything harmful with their manipulated client.
As for your login thing, I'd say it's perfectly fine to keep some magic number in your client determining its version (usually a protocol version or some checksum). This is passed during the login process. If it doesn't match, access is denied.
In addition to that, ensure the game client is started by the launcher. There are several ways to do this, e.g. the actual game client could be a dynamic link library - not a real executable file - which is then loaded and run by the launcher.
Overall, there's no 100% perfect way to avoid manipulations and the like. There's always some way to cheat or modify something (even if it just happens in-memory). Live with it and just fight those really doing something wrong rather than trying to secure everything.
Such checks should only keep the player from accidently connecting with or using some kind of manipulated or broken client. If the player forcefully circumvents such measures, it's their problem in case something goes wrong and their client acts weird, displays wrong things, etc. (i.e. other players must not be affected, but if the player manipulating their game can't play, it's their problem).