2010-06-24 9 views
1

Je maintiens une petite application qui est construite en VC++ 2008 (une application .net) que je distribue en utilisant innosetup.Numéro de version automatisé dans une application VC++/CLI en utilisant innosetup pour distribuer

Actuellement je mettre à jour manuellement le numéro de version dans l'en-tête de l'application principale:

static String^ m_version = "1.1"; 
static String^ m_build = "1"; 

Le logiciel met cela ensemble en interne pour signaler v1.1.1 dans ce cas. Pour ce faire, une version que je puis modifier manuellement mon script .iss:

#define MyAppVer "1.1.1.0" 
#define MyAppVerName "MyApp v1.1.1" 

OutputBaseFilename=Setup_{#MyAppName}_v{#MyAppVer} 

Est-il possible que je peux automatiser tout cela, donc je besoin de mettre à jour que le numéro de version une fois?

Répondre

3

Cette méthode n'est pas appropriée pour intégrer des informations de version dans votre programme. Vous devez utiliser une ressource Version. Voir + (Autres fenêtres) + Vue des ressources. Ajoutez Resource + Version et remplissez les propriétés FILEVERSION et PRODUCTVERSION. Après avoir créé, vous pouvez voir cette version lorsque vous cliquez avec le bouton droit sur la DLL ou EXE dans l'Explorateur. InnoSetup devrait être capable de le voir aussi, pas sûr.

Si vous avez besoin de ces informations lors de l'exécution (à propos de la boîte ou quelque chose comme ça), utilisez la classe FileVersionInfo.

+0

Est-il possible de récupérer cette information à partir de la fonction 'main' dans une application CLI winforms? J'ai un peu de code de gestion des exceptions là-dedans que je remplis normalement avec le numéro de version afin que je puisse l'enregistrer en cas de problème. –

+0

Comme je l'ai dit, utilisez la classe FileVersionInfo. Obtenez le chemin d'accès à l'assembly, par exemple, Assembly.GetEntryAssembly(). Emplacement –

+0

L'a obtenu! 'String^appVersion = FileVersionInfo :: GetVersionInfo (Assembly :: GetEntryAssembly() -> Emplacement) -> ProductVersion;' –