Microsoft would prefer that people use C#, but the number of software made in C++ is too much for Microsoft to stop supporting C++ and they know it. And a big difference between C++ and C# is that C++ is way faster at execution then C#. You wont see any games made in C# (or even Java) because games rely too much on execution time and CPU power. The time lost with the use of the Just-in-time compiler of C# would be better spent in AI calculation in games. However, C# tends to be used more and more for office software because C# gives more power to user interface and is easier to maintain. There's a lot of thing that is done easily in C# that in C++ would take a shitload of work.
In term of execution time, here is a little list of language that i know:
Assembler: used on very low level nowadays, such as chip programming. It is very fast because it is the native language of a computer. That language is directly translated to 0 and 1. The drawback is that it is very hard to understand what is written and it's non-intuitive and that every type of processor and OS has it's own assembler. Code written for an intel processor won't work for an AMD processor. Early games were made with this. I'd bet that Civ 1 was made in assembler. I'm not sure if it's still used for games on portable console, though I really doubt it.
Kobold: very old language. I don't know it personnaly, but i do know that most banking system use it because it is very secure. And it's fast enough. But hard to maintain.
C/C++: used for higher level use, such as games and simulators. More intuitive and maintainable then assembler. Still has a good performance and gives space for more powerful concept such as OO. The code is translated to assembler so that the computer understands it.
Java: even higher then C++. you will rarely see games made with this since it's plateform independant. Any code you write in Java can be run anywhere if there is a Java console installed. The problem with this is it's slower then C++. What is done at compile-time is that the code you write is translated to an intermediate language (not assembler) that is then red at runtime by the Java console and executed. That Java console adds a new layer that makes execution slower. Instead of code running directly on the computer, it is run on a virtual computer that is the Java console. Pretty twisted, but very useful for office softwares. Used more and more since it can be run everywhere.
C#: about the same level as Java. It is plateform independant too, but Microsoft only support that "plateform independant" thing in Windows... go figure. As for Java, you need the .NET Framework installed to run C# code. What is done at compile-time is that the C# code is translated to an intermediate language like Java, but at runtime that intermediate language is compiled Just-in-time (JIT) to assembler. Some people claims that this method is faster, but i haven't seen any difference between C# and Java. The main advantage between Java and C# is that C# has a more intricate knowledge of the Windows plateform and is thus preferred over Java for software destined to Windows.
Hope i haven't been too technical, but i just love what i do ^^