Better is in the eye of the beholder though.

There is no question that .Net languages suffer just like Java and other p-code/bytecode or scripting languages from easy decompilation and reverse engineering even when obfuscated. That's an issue for some and less of an issue for most programmers.

There is also the performance hit and erratic operation you risk from languages that are a mix of interpreted and JITted code at runtime, along with the hit you take for non-deterministic garbage collection schemes.

Then you have the "broken interpreter" issue. .Net's in particular is subject to breaking, and in later versions of Windows several of these come preinstalled. This makes them non-repairable, forcing a user to reinstall Windows to make your programs ever work again.

VB6 remains immune to all of these issues. Nothing says its runtime can't break too, but I have never heard a case of it just happening without a discernable reason. .Net on the other hand seems to be able to break for reasons nobody has ever tracked down.

How to repair the .NET Framework 2.0 and 3.0 on Windows Vista describes the limited things you can try that might repair it in some cases, but ends up punting and telling people to reinstall Windows. As noted there the problem extends to Windows 7, but it also occurs in Win8 and Win8.1 and will probably rear its head just as often in Win10.