From: adebaene on
On 24 mar, 09:32, TheOne <daewon.y...(a)gmail.com> wrote:
> On 3¿ù24ÀÏ, ¿ÀÈÄ2½Ã23ºÐ, "Carl Daniel [VC++ MVP]"
>
>
>
>
>
> <cpdaniel_remove_this_and_nos...(a)mvps.org.nospam> wrote:
> > TheOne wrote:
> > > Then, what should I do not to see this error message from an app built
> > > on VS2008? I guess this should happen on every old system without the
> > > directory. Which setting shoud I change in VS2008? Should I install
> > > the directories needed whenever I install my application?
>
> > You need to deploy the VC 2008 runtime to your vista machine. You should
> > have a file named vcresidt_x86.exe (or _x64, if you're on 64-bit) in a
> > subdirectory of your VS installation. Run that exe file on the Vista
> > machine. You can also download the redist from microsoft downloads if you'd
> > prefer.
>
> >http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e0....
>
> > Alternatively, you can build your application with static linking so that
> > you don't depend on having the redistributables installed.
>
> > -cd
>
> Thank you for the kind answer. Much has been cleared.
>
> OK. I now know that I can solve this for MY computer. But the problem
> is that our team is migrating the IDE from VS 6.0 to VS 2008 for our
> development and the end product should support from 2k to Vista.
>
> Should I install the redis package everytime our product is installed?

If you want to link against DLL version of the CRT (C-RunTime), then
yes. That's why setup projects are for... There are .msm files to
redistribute the CRT' dlls with your apps, and there is also several
other redistibution possibilities.


> Or should I static-build every module of my product?

That is another solution, but it won't work if:
- you've got several modules (eg, exes and dlls) in your app.
- and you're passing "CRT state dependant" objects from one module to
another. What it means, is that you can't (for example) :
--> do a "fopen" in the EXE then passes the FILE* to a DLL and have
the DLL do a fread/fwrite/whatever with it.
-->new/malloc a pointer in a DLL and delete/free it in another DLL.
etc....

Moreover, Microsoft recommends NOT to statically link the CRT, because
it means your application won't take benefit from a potential update /
bug correction that MS would apply to the CRT and distribute through
Windows Update. I find this last argument quite weak, but anyway....

For more information on application deployment, see
http://msdn2.microsoft.com/en-us/library/zebw5zk9.aspx


> Or should I build for each version of OS?
This has nothing to do with the target OS, but with wether the VC9 CRT
is already installed on the target machine (you can't count on it).

> Or should I stick to old VS 6.0?
I do not belive the deployment problem is a sufficient reason to stick
to the old compiler. YMMV

Arnaud