Two hours later, I gave up. The mysterious side-by-side manifest error wasn’t solvable. I installed all the redists, and even installed a neat redist installer I randomly found on GitHub which brute-force-installs every possible redist known to humanity.
Didn’t matter. The side by side error was just insurmountable.
Now, as a former gamedev who grew up on windows, I have a soft spot for Microsoft. I love me some visual studio. Yum yum, that IDE was cool a decade before Jetbrains showed everyone why IDEs are cool.
But it’s been… eight years now since I switched to macOS, and more generally exited from the MS development ecosystem.
I don’t know, man (or woman or they). Microsoft’s current policies are hopelessly complicated compared to unix. I’ve been programming for almost two decades. If I can’t analyze and fix an error that clearly shows exactly which manifest entry is missing, well… I think we’ll just agree to disagree that Microsoft is making nice decisions about ABIs and related ideas.
Here’s a wild idea: just let a program run, and trap errors into an error log. Jetbrains does it. Their early access IDE happily lurches along even with dozens of Frankensteinesque errors coming up.
Refusing to start because of an ABI mismatch (or indeed, dying at the first error) was one of the most unfortunate decisions in OS design.
Probably not so great for security. I’d expect most cases where Windows switched from being lenient to being strict are exploit mitigations.
And many Windows developers choose to rather install the specific minor version they used globally, instead of just vendoring it in the program folder (even though the license allows it, hence "redistributable").
Right now my machine has no less than 4 versions of the 2008 redist installed globally, for each x86 and x64.
Nothing about this or the way redists are managed seems hopelessly complicated. Also there is nothing it can do but die at the first error in this case, it's not side modules or components failing to load it's the stuff like memcpy and iostream for the main process of the app.