Compiled in VS 2005, Win XP....won't run in Vista??

Started by
4 comments, last by gan 16 years, 2 months ago
I have a C++ project that I've compiled in Windows XP using VS 2005. Runs just fine, no problems. But when I copy it to Vista and run it, it doesn't start and Vista tells me the configuration doesn't match the app. I can recompile it in Vista using VS 2008 and it runs just fine, so its not the code. What is causing this? The C++ project is strictly a win32 app, no .NET code is used. But the project is actually a solution made up of 4 subprojects, 3 of which are DLLs used by the 4th.
Author Freeworld3Dhttp://www.freeworld3d.org
Advertisement
My guess is it's a manifest issue. I've had problems where the manifest created by VS2005 for an application specifies a specific version of the VS2005 C runtime, so when trying to run that on another machine it fails because it can't find the required version (major.minor of what's installed and required are the same, but build number is different). I've even had it fail because the manifest specified 2 different versions of the same runtime DLLs, 1 of which wasn't present on the system.

To check if this is what's happening, check in your build directory for the intermediate manifest file and open it in notepad (it's XML). Take a look at what DLLs and versions it requires then check in the C:\Windows\WinSxS directory on your Vista machine to see if that version is present.
"Voilà! In view, a humble vaudevillian veteran, cast vicariously as both victim and villain by the vicissitudes of Fate. This visage, no mere veneer of vanity, is a vestige of the vox populi, now vacant, vanished. However, this valorous visitation of a bygone vexation stands vivified, and has vowed to vanquish these venal and virulent vermin vanguarding vice and vouchsafing the violently vicious and voracious violation of volition. The only verdict is vengeance; a vendetta held as a votive, not in vain, for the value and veracity of such shall one day vindicate the vigilant and the virtuous. Verily, this vichyssoise of verbiage veers most verbose, so let me simply add that it's my very good honor to meet you and you may call me V.".....V
You can also try setting the compatiblility mode to the os of your choice in the properties of the executable(as an interim solution).
Quote:Original post by steven katic
You can also try setting the compatiblility mode to the os of your choice in the properties of the executable(as an interim solution).


It wont' help; this is a runtime dll problem as joanusdmentia pointed out above; the target machine simply doesn't have the dlls it needs to run the application.
Have a look at depends http://www.dependencywalker.com/ - it is a (very) lightweight application that will trace all the dll dependencies of an executable. It will show you if any dll's that the app expects are missing on the target machine. Run it against your app on the Vista machine.

For instance, it might be that you have compiled in debug and not release (or inadvertently have a misconfig on a specific module indicating debug) and then when you copy binaries to another machine the debug version of the dll's are unavailable. I found that Depends.exe was invaluable when I was trying to find a problem in a service I had written. I had a situation where I could not even attach a debugger to the process because of a failure to get onto the stack due a runtime dll load failure but depends.exe showed me where the problem was immediately.
Have you disabled the UAC or run your app as Administator? This might help sometimes, especially your app tries to access OS-level settings!

This topic is closed to new replies.

Advertisement