What goes into a Service Pack?

What goes into a Service Pack?

  • Comments 4

With the VS 2003 Service Pack 1 released and the VS 2005 Service Pack 1 release imminent, it’s a good time to talk about what Visual C++ Service Packs contain and the rationale behind this.


The primary purpose of a Service Pack is to improve the stability of the product over what was initially shipped. I know sometimes it’s hard to believe, but Visual C++ does ship with bugs!  Most of these bugs can be worked around or are unnoticed. Some bugs, however, do block progress.


It’s the bugs that block progress that we focus on for Service Packs. We also roll in hotfixes made since the last Service Pack. Hotfixes are bug fixes that we do for customers who are so blocked that they can’t wait for even a Service Pack.  Examples of issues we look for are around security, accessibility, crashes, hangs, data loss, corruption, and resource leaks.  The critical factor in deciding to investigate these issues is whether they present situations that block customer progress.


After investigation, we discover a number of the possible set of issues don’t block progress after all.  And we invariably find issues that would require significant changes to the Visual C++ code base to fix.  Examples of significant changes may include small changes to core areas of the product or architectural changes.  Such issues don’t usually make the cut to get into the Service Pack.  Remember the goal is to improve stability: We don’t want to add more blocking issues as a side effect of fixing a bug.


This is also a key reason why we rarely add feature enhancements to a product via a Service Pack.  We don’t want to add more blocking issues.


Service Pack beta periods are usually pretty short. This is because there is such a high bar for bug fixes that there isn’t expected product instability.  It also allows us to get fixes distributed more broadly more quickly if we shorten the development and pre-release periods.  This rapid release approach also re-enforces the high bar for fixing bugs.


VS 2003 Service Pack 1 is just such a Service Pack as was VS 2002 SP1.  VS 2005 SP1 is a little different in some respects – mostly in the number of bug fixes. (see the September 27th blog for our beta 1 announcement).  Normally, we wait for someone to tell us that they are significantly blocked before we fix a bug for a Service Pack. With VS 2005, we spent some considerable time after VS 2005 shipped fixing issues that were reported via the Product Feedback Center, via product support, etc.


Because VS 2005 contains so many more fixes than we normally put into a Service Pack, we would welcome more developers than normal installing the beta and trying it out. This Service Pack should have broader appeal because there are so many fixes in so many areas of the product. So if you haven’t tried out the VS 2005 SP1 beta yet, please give it a whirl. You can sign up and download the Beta by accessing the Microsoft Connect site at https://connect.microsoft.com/visualstudio.



Shaun Miller
QA Lead
Visual C++ Release/IDE

Leave a Comment
  • Please add 2 and 2 and type the answer here:
  • Post
  • I have a blocking issue. After faithfully following the instructions on adding a dialog box, I find the code for invoking the dialog NEVER works. An example of what I find:

    After adding the dialog by right clicking on the project name in solution explorer, I add code as follows to the main form form1.h under a button press:


    Example * exDialog = new Example();



    Intelisense recognises every entry and shows a drop down menu of possible selections after exDialog-> .

    This code then refuses to compile giving:

    error C2065: 'Example' : undeclared identifier

    error C2065: 'exDialog' : undeclared identifier

    error C2061: syntax error : identifier 'Example'

    error C2227: left of '->ShowDialog' must point to class/struct/union type is ''unknown-type''

    error C3861: 'exDialog': identifier not found, even with argument-dependent lookup

    I have checked over and over again but cannot find any point where I have deviated from the instructions. What the hell is going on here?

  • You've created a new dialog which was created in a new file.  Your main form needs to know what that file is.  

    Your include statement should look something like this:

    #include "Example.h"

    Intelisense knows about the file because it is included in the solution, but since you didn't include the new file the compiler is lost.

    btw this probably isn't the best forum to get beginner help about how compilers work.  Try codeproject for that.

  • For exapmle,

    the sscanf_s function in the below code causes the crash while the sscanf version works fine.

    // sscanf_s_Crash.cpp : Defines the entry point for the console application.


    #include "stdafx.h"

    int _tmain(int argc, _TCHAR* argv[])


    char szBuf[256] = "Active Connections\n";

    char protocol[64], localAddress[64], remoteAddress[64], state[32];

    long pid;

    // The following function call will result in stack-overflow/crash.

    sscanf_s(szBuf, "%s %s %s %s %d", protocol, localAddress, remoteAddress, state, &pid);

    return 0;


  • Hi Subbu N,

    I was having this same problem, but learned that you must provide an additional parameter in the sscanf_s function.  To make your example work, it should be:

    sscanf_s(szBuf, "%s %s %s %s %d", protocol, _countof(protocol), localAddress, _countof(localAddress), remoteAddress, _countof(remoteAddress), state, _countof(state), &pid);

    Basically, when you use s, S, c, C, or [ in your format string you must give it both the string and the size of the string, instead of just the string, like you used to in sscanf.  Unfortunately the compiler doesn't complain about not providing all these arguments, so this was rather hard to figure out (at least for me...).





Page 1 of 1 (4 items)