Compiled in VS 2005, Win XP....won't run in Vista??
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.
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.
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.
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.
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
Popular Topics
Advertisement