Quick answers, just for fun:
Best practices for installers? Put the user-specific configuration in the user's profile directory (look up SpecialFolders, for instance) because that way roaming profiles work. Only the static DLLs and EXEs and stuff should go in the Program Files directory.
Best practices for user interfaces? Try to follow the principle of least astonishment. If you're a user looking at your piece of software for the first time, what will you try to do? How will you approach it? For instance, if there's stuff that looks a bit like Explorer, make it work like Explorer. If it looks a bit like Office, make it work like Office. Blend together the familiar and only add small bits of the unfamiliar when it makes sense.
Where should one put one's DLLs? When to use the GAC and how to install something into it? Put DLLs into the folder in Program Files. Only put something into the GAC if it's useful to multiple programs. And even then don't be too hasty about it. Try to make your app xcopy-deployable.
Things Programmers Ought to Know, but often don't (about Windows or .NET): Learn WPF. It makes programming fun again.