This section of the archives stores flipcode's complete Developer Toolbox collection, featuring a variety of mini-articles and source code contributions from our readers.

| Automatically Updating Build Version Number (MSVC) Submitted by

I have spent today looking for a way to automatically update the built number of an application after a succesful built. I started out naively assuming that there would be a simple checkbox labeled 'Increment Build Number Automaticaly'....silly me ;)
However, after searching around on the web I did find some solutions to the problem. Most of them had a few problems however:

> - You needed one or more extra .h files
> - You needed to invoke a special command to build
> - Built numbers were also incremented on unsuccesful builts
> - Difficult to implement (for me at least)

However, I did find some good reference materials that bypassed some of these problems. One is a VBScript from Thomas Mahler, found at CodeGuru (link) Which doesn't need extra .h files, but suffers from the other two problems. The other is a Microsoft Knowledge Base article about built numbers, (link) Which does need .h files but solves the other two.
Combining them was easy, so I now post a macro that solves all three problems and should be easy to use:

    sub Application_BuildFinish(nNumErrors, nNumWarnings)
    'DESCRIPTION: Event to increase version counter in rc script after
    succesfull builds. (c)'2002 by Stijn de Witt, modified from code by Th. Mahler, 1998
       if nNumErrors <= 0 then
        'OPEN THE PROJECTS RESOURCE SCRIPT
        Documents.Open (ActiveProject.Name + ".rc"), "Text"
        Windows(ActiveProject.Name + ".rc").Active = True

        'SELECT BUILD NUMBER FROM PRODUCTVERSION
        ' Find line with PRODUCTVERSION Information
        ActiveDocument.Selection.FindText "PRODUCTVERSION", dsMatchForward + dsMatchFromStart + dsMatchCase
        ' Move to eol
        ActiveDocument.Selection.EndOfLine
        ' Mark Build Number
        ActiveDocument.Selection.WordLeft 1
        ' Store in strVersion
        Dim strVersion
        strVersion = ActiveDocument.Selection.Text

        'INCREASE BUILD NUMBER AND REPLACE OLD ONE
        ActiveDocument.Selection.ReplaceText strVersion , strVersion+1
        strVersion = strVersion + 1

        'NOW DO THE SAME FOR FILEVERSION, ProductVersion AND FileVersion
        'START WITH FILEVERSION
        ' Find line with FILEVERSION Information
        ActiveDocument.Selection.FindText "FILEVERSION", dsMatchForward + dsMatchFromStart + dsMatchCase
        ' Move to eol
        ActiveDocument.Selection.EndOfLine
        ' Mark Build Number
        ActiveDocument.Selection.WordLeft 1
        ' Store in strTmp
        Dim strTmp
        strTmp = ActiveDocument.Selection.Text
        ' Replace old build number with new
        ActiveDocument.Selection.ReplaceText strTmp , strVersion

        'THEN UPDATE ProductVersion
        ' Find line with ProductVersion Information
        ActiveDocument.Selection.FindText "VALUE ""ProductVersion"",", dsMatchForward + dsMatchFromStart + dsMatchCase
        ' Move to eol and then to end of build number
        ActiveDocument.Selection.EndOfLine
        ActiveDocument.Selection.CharLeft dsMove, 3
        ActiveDocument.Selection.WordLeft 1
        ' Store in strTmp
        strTmp = ActiveDocument.Selection.Text
        ' Replace old build number with new
        ActiveDocument.Selection.ReplaceText strTmp , strVersion

        'FINALLY UPDATE FileVersion
        ' Find line with FileVersion Information
        ActiveDocument.Selection.FindText "VALUE ""FileVersion"",", dsMatchForward + dsMatchFromStart + dsMatchCase
        ' Move to eol and then to end of build number
        ActiveDocument.Selection.EndOfLine
        ActiveDocument.Selection.CharLeft dsMove, 3
        ActiveDocument.Selection.WordLeft 1
        ' Store in strTmp
        strTmp = ActiveDocument.Selection.Text
        ' Replace old build number with new
        ActiveDocument.Selection.ReplaceText strTmp , strVersion

        'CLOSE FILE, BUILD APP AND SAVE ALL DOCUMENTS
        ' Close RC file
        ActiveDocument.Close()
        ' Save documents
        Documents.SaveAll true
          PrintToOutputWindow "Successfully built " & ActiveProject.Name & "version " & strVersion
       end if
    end sub

The macro hooks to an event that MSVC fires after the built is completed. It checks if the built was succesful, then opens the project resource file to update the version information. It still suffers from the minor glitch that if the resource file is already open, a popup box appears saying that it will be closed. This could probably be solved to, so please let me know if you do.

The zip file viewer built into the Developer Toolbox made use of the zlib library, as well as the zlibdll source additions.

Copyright 1999-2008 (C) FLIPCODE.COM and/or the original content author(s). All rights reserved.
Please read our Terms, Conditions, and Privacy information.