I maintain a small app which is built in VC++ 2008 (a .net app) which I distribute using innosetup.
Currently I manually update the version number in the header of the main app:
static String^ m_version = "1.1";
static String^ m_build = "1";
The software puts this together internally to report v1.1.1 in this case. To do a release I then manually edit my .iss script:
#define MyAppVer "1.1.1.0"
#define MyAppVerName "MyApp v1.1.1"
OutputBaseFilename=Setup_{#MyAppName}_v{#MyAppVer}
Is there some way I can automate all of this so I need only update the version number once?
This is not the proper way to embed version info in your program. You should use a Version resource. View + (Other Windows) + Resource View. Add Resource + Version and fill in the FILEVERSION and PRODUCTVERSION properties. After you build, you can see that version when you right-click the DLL or EXE in Explorer. InnoSetup should be able to see it too, not sure.
If you need this info at runtime (About box or something like that) then use the FileVersionInfo class.