views:

2502

answers:

7

Hello,

We're looking at upgrading from Visual Studio 2005 to Visual Studio 2008. I discovered the following disturbing comment:

http://msdn.microsoft.com/en-us/library/6sehtctf.aspx

"Beginning with Visual C++ 2008, Visual C++ does not support targeting Windows 95, Windows 98, Windows ME, or Windows NT."

Does this mean that if we rebuild our products with visual C++ 2008, they will stop working on Windows 98 machines? It sounds like it, but I have trouble believing they'd make that big a change.

Thanks for your help.

A: 

according to the following link, windows 98 is not supported by .NET 3.5 so I would imagine that is what they mean. You can still do .NET 2.0 and lower development, but if you use the 3.5 libraries, Windows 98 is not supported.

.NET 3.5 information

Jeremy B.
A: 

The 3.5 Framework won't even install on Windows 2000 Server at this point. So I don't believe that they will on 95, 98, or NT either. Microsoft doesn't want the responsibility of supporting these retired operating systems anymore.

JFV
Please don't use terms like "M$". It's not appropriate for this community.
unforgiven3
Sorry about that, I started out on the support side of things and recently moved to development. I guess some old habits still bleed through. Thanks for the edit!
JFV
+11  A: 

It's not just about .NET 3.5. It's about the Windows SDK header file macros and definitions pulled in by the mandatory version bump in WINVER. So yes, Colen, Visual C++ 2008 binaries will target the Windows NT APIs only and while occasionally they may work on 98 you should assume that you cannot use Visual Studio 2008 to target Win9x. You will have to use VS2005 or older.

Mihai Limbășan
Chris Becke
You should not assume that I assume. You can play with the PE file header flags in the linker step to get the 9x PE loader to properly parse the VS9 output. Then it's just a matter of resolving DLL imports. But there is a wide gap from "loads" to "works properly", which is why I used "occasionally."
Mihai Limbășan
+1  A: 

It's natural that they do not support older versions of their operating system on their newer products. It would cost them more (not just monetary cost, but also making harder or impossible to provide some newer useful features) to make things work with the limitations (and often bugs) of older systems. This happens all the time, and with everyone; new versions of gcc drop support for older less popular architectures; new releases of glibc require a more recent minimum kernel version; and so on.

These operating systems have long been retired; from Microsoft's point of view, nobody should be using them anymore. If you still want to develop for them, you can use older tools of the same vintage.

CesarB
A: 

I'd recommend that you take this as a opportunity to stop supporting Windows 9x. This is a good reason as any to do so. And, at least if you're writing C/C++ code for the Win32 API, life is much easier if you can assume that the target OS is Windows 2000 or later.

JesperE
A: 

While I agree with JesperE, Windows 98 is such a small percentage of users that it makes little sense to target them, unless of course you know a large percentage of your customers are in fact using Windows98.

In any case, you can in fact target Windows 98 in Visual Studio 2008 (you can't develop on Windows 98). You must, however, target your projects at .NET 2.0 only, you cannot use any 3.0, or 3.5 features.

Its me
A: 

Yes it does mean that: The windows CreateProcess and LoadLibrary APIs on Windows NT before 2000 and all of Windows (95,98 AND ME) will not load a DLL or EXE file made by VS9 because the PE header in the file has the required OS version field set to 5.

The error message upon attempting to load a VS9 generated exe file will (be a very unfriendly modal error dialog) actually say "You need to upgrade your operating system to run this program".

I experimented with editing the field to 4 - the binary will be loaded, but any use of the VS9 c-runtime will hang or crash the process. There are ways to get VS9 projects to not use their native c-runtimes but if massive use of c++ features is important to you this approach is not going to scale past a small application.

VS8 / VS2005 has most of the features of VS9 but still targets early OS versions which is why at my shop we are sticking with that for the moment.

Chris Becke