I'm past the point of despair with this one guys. I was so sure I'd got it all boiled down to a simple x86/x64 problem, with a simple enough solution. But no. It's back. Back again to bite me on the ass.
You see, I've made an app and was previously having trouble installing it on a laptop running Vista. Then I noticed the laptop wasn't just running Vista, but running Vista on a 64 bit architecture. So I installed Visual Studio 2010 on the laptop and recompiled one of the DLLs for x64. The app worked. Everything is groovy.
Except now I'm trying to install the same app on some 32 bit machines running XP. And the App won't work again. Even after ensuring that .NET 4 and VC++ 2010 are both installed on them.
So now I'm taking stock and a common pattern emerges: The app only works if VS2010 is installed on the same computer.
My question then, is what steps does Visual Studio take to ensure an app will run? And how can I do these steps on other computers without installing Visual Studio?
Update - my app and how it fails
My app calls two main managed libraries - both of which are wrappers for unmanaged libraries: EnguCV for image processing and Audiere for audio output.
When I say it doesn't work, what I mean is that it crashes before it fully opens. The error is a DllNotFound error and cites Audiere.Net (the wrapper) as the cause. Unfortunatey, ProcMon seems to dislike these machines and invariably hangs after a few seconds (taking the whole OS with it).
Update 2 - the VS solution
In case anyone wanted to try it out for themselves, I've uploaded the full (22mb zipped) VS solution. If you want to play with audiere.dll
, Audiere.Net.dll
and libaudieresharpglue.dll
, you'll need to grab the Win32 Audiere DLL, lib, and header as well as Harald Fielker's C# binding.
If anyone is mad enough to have a play around, I'd be very grateful for a sanity injection.