Cum pot schimba versiunea de program automat ?
-
- Membru++
- Posts: 687
- Joined: 10 Sep 2008, 21:40
- Judet: Cluj
Cum pot schimba versiunea de program automat ?
Se poate schimba numarul versiunii de program automat , pentru cazul cand programul isi face update ?
- Marius Bancila
- Fondator
- Posts: 2344
- Joined: 11 Jul 2007, 11:45
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Cum pot schimba versiunea de program automat ?
Sa schimbi unde? Vrei sa modifici informatiile din tabela de version information? Atunci uita-te la linkurile astea:
http://www.codeguru.com/tools/standalon ... .php/c1403
http://www.the-software-box.com/changeversion.aspx
http://stackoverflow.com/questions/2842 ... ng-exe-dll
http://www.codeguru.com/tools/standalon ... .php/c1403
http://www.the-software-box.com/changeversion.aspx
http://stackoverflow.com/questions/2842 ... ng-exe-dll
-
- Membru++
- Posts: 687
- Joined: 10 Sep 2008, 21:40
- Judet: Cluj
Re: Cum pot schimba versiunea de program automat ?
Da , asa vrea sa schimb din tabela de version information ( VS_VERSION_INFO din resurse ) , pentru ca in AboutDlg afisez valoarea de acolo.
- Marius Bancila
- Fondator
- Posts: 2344
- Joined: 11 Jul 2007, 11:45
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Cum pot schimba versiunea de program automat ?
Explica-ne putin. Tu ai sursele si vrei sa modifici in surse? Sau ai doar un DLL si vrei sa-i modifici numarul de versiune? Daca vrei sa modifici direct in surse e foarte simplu. O faci fie din Resource editor fie direct in fisierul .rc, unde ai o zona de genul:
In loc de 1,0,0,1 si 1.0.0.1 pui ce vrei.
Daca tu vrei asta automat, atunci exista unele add-onuri, sau macrouri pentru asta.
Code: Select all
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "TODO: <Company name>"
VALUE "FileDescription", "TODO: <File description>"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "DemoMFC.exe"
VALUE "LegalCopyright", "TODO: (c) <Company name>. All rights reserved."
VALUE "OriginalFilename", "DemoMFC.exe"
VALUE "ProductName", "TODO: <Product name>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
Daca tu vrei asta automat, atunci exista unele add-onuri, sau macrouri pentru asta.
- Silviu Ardelean
- Senior
- Posts: 1175
- Joined: 12 Jul 2007, 09:22
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Cum pot schimba versiunea de program automat ?
O versiune mai flexibila ar fi sa ai un header file special gen "version.h" cu doua constante ce sa fie modificate doar in momentul in care faci un build de release/kit (poti face un script .VBS pentru asta).
Apoi sa modifici si sa utilizezi aceste constante in fisierul de resurse you_project.rc sau your_project.rc2 in zonele in care vrei sa folosesti aceste constante.
Code: Select all
#define PRODUCT_VERSION 1.2.3.4
#define PRODUCT_VERSION_STR "1.2.3.4"
Code: Select all
#include "version.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION PRODUCT_VERSION
PRODUCTVERSION PRODUCT_VERSION
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000004b0"
BEGIN
VALUE "CompanyName", "YourCompany"
VALUE "FileDescription", "bla bla"
VALUE "FileVersion", PRODUCT_VERSION_STR
VALUE "InternalName", "bla bla 2"
VALUE "LegalCopyright", "Copyright © YourCompany"
VALUE "OriginalFilename", "youApp.exe"
VALUE "ProductName", "yourProductName"
VALUE "ProductVersion", PRODUCT_VERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0, 1200
END
END
-
- Membru++
- Posts: 687
- Joined: 10 Sep 2008, 21:40
- Judet: Cluj
Re: Cum pot schimba versiunea de program automat ?
Setez versiunea de prorgam din editorul mediului de programare , si la run time citesc in modul urmator versiunea :
si cu stringul sVersion setez un text in AboutDlg ... ma gandeam ca , in cazul unui update a programului compilat , pot modifica versiunea de program ca apoi s-o afisez in about dialog ...
Code: Select all
void CAboutApplicationPage::GetAppVersion(CString &sVersion)
{
DWORD dwDummy = 0;
CString sAppFileName;
try
{
::GetModuleFileName(NULL,sAppFileName.GetBuffer(_MAX_PATH),_MAX_PATH);
sAppFileName.ReleaseBuffer();
LPTSTR lpAppFileName = sAppFileName.GetBuffer(0);
DWORD dwSize = ::GetFileVersionInfoSize(lpAppFileName,&dwDummy);
LPBYTE lpData = new BYTE[dwSize];
if(::GetFileVersionInfo(lpAppFileName,0,dwSize,lpData))
{
LPTSTR lpBuffer = NULL;
CString sSubBlock = _T("\\StringFileInfo\\040904b0\\ProductVersion");
UINT nLenght = 0;
if(::VerQueryValue(lpData,sSubBlock.GetBuffer(0),reinterpret_cast<void **>(&lpBuffer),&nLenght))sVersion = lpBuffer;
LANGID lid = ::GetUserDefaultLangID();
sSubBlock.ReleaseBuffer();
}
sAppFileName.ReleaseBuffer();
delete []lpData;
}
catch(CException* pException)
{
pException->Delete();
}
}
- cristianamarie
- Membru++
- Posts: 480
- Joined: 12 Mar 2009, 18:47
- Judet: Iaşi
- Location: Iasi
Re: Cum pot schimba versiunea de program automat ?
Incluzi in .rc si un _version.h al tau unde definesti ce trebuie.
Un _version.h al tau:
si in .rc un :
Evident, poti sa definesti in _version.h constante si pentru celelalte treburi din version info, InternalName, OriginalFilename etc.
Dupa care in orice alt loc devine o chestie de inclus "_version.h" si CString::Format.
Un _version.h al tau:
Code: Select all
#define MYPRODUCT_VERSION_MAJOR 1
#define MYPRODUCT_VERSION_MINOR 1
#define MYPRODUCT_VERSION_BUILDNUMBER 82
#define MYPRODUCT_VERSION_QFE 0
#define _STRING(x) #x
#define STRING(x) _STRING(x)
Code: Select all
...
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "_version.h"
...
2 TEXTINCLUDE
BEGIN
"#include ""_version.h""\r\n"
"\0"
END
...
VS_VERSION_INFO VERSIONINFO
FILEVERSION MYPRODUCT_VERSION_MAJOR,MYPRODUCT_VERSION_MINOR,MYPRODUCT_VERSION_BUILDNUMBER,MYPRODUCT_VERSION_QFE
PRODUCTVERSION MYPRODUCT_VERSION_MAJOR,MYPRODUCT_VERSION_MINOR,MYPRODUCT_VERSION_BUILDNUMBER,MYPRODUCT_VERSION_QFE
FILEFLAGSMASK 0x1fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "*** comments placeholder ***"
VALUE "CompanyName", "*** company ***"
VALUE "FileDescription", "*** file description ***"
VALUE "FileVersion", STRING(MYPRODUCT_VERSION_MAJOR) "." STRING(MYPRODUCT_VERSION_MINOR) "." STRING(MYPRODUCT_VERSION_BUILDNUMBER) "." STRING(MYPRODUCT_VERSION_QFE)
VALUE "InternalName", "*** internal name ***"
VALUE "LegalCopyright", "*** copyright ***"
VALUE "OriginalFilename", "*** original filename ***"
VALUE "ProductName", "*** product name ***"
VALUE "ProductVersion", STRING(MYPRODUCT_VERSION_MAJOR) "." STRING(MYPRODUCT_VERSION_MINOR) "." STRING(MYPRODUCT_VERSION_BUILDNUMBER) "." STRING(MYPRODUCT_VERSION_QFE)
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
Dupa care in orice alt loc devine o chestie de inclus "_version.h" si CString::Format.
Code: Select all
...
CStringW strVersion;
strVersion.Format(L" %d.%d.%d.%d",
MYPRODUCT_VERSION_MAJOR, MYPRODUCT_VERSION_MINOR,
MYPRODUCT_VERSION_BUILDNUMBER, MYPRODUCT_VERSION_QFE);
// display strVersion in about dialog ...
..
Nuclear launch detected
-
- Membru++
- Posts: 687
- Joined: 10 Sep 2008, 21:40
- Judet: Cluj
Re: Cum pot schimba versiunea de program automat ?
Multumesc tuturor pentru idei ... o sa vad cum rezolv ...
Re: Cum pot schimba versiunea de program automat ?
Facusem in vremuri immemoriale modificarea de resurse compilate, si cu timp pot sa mai gasesc codul, sau notitele mele
Dar pentru afisat in about, noi am ales solutia lenesului de a afisa versiune pusa in setup care se gaseste prin registry, care si la patch, si la umpgrade trebuie sa se schimbe, macar minor versionu.
Daca vreune din idei te ajuta, zii si elaborez.
Dar pentru afisat in about, noi am ales solutia lenesului de a afisa versiune pusa in setup care se gaseste prin registry, care si la patch, si la umpgrade trebuie sa se schimbe, macar minor versionu.
Daca vreune din idei te ajuta, zii si elaborez.
-
- Membru++
- Posts: 687
- Joined: 10 Sep 2008, 21:40
- Judet: Cluj
Re: Cum pot schimba versiunea de program automat ?
Cred ca o sa adopt solutia de a pune versiunea de program prin registrii pe undeva ... nu vreau sa va pun la cautat pentru asa lucru ( relativ ) minor .
Deocamdata alte lucruri sant importante ...
Deocamdata alte lucruri sant importante ...
- Silviu Ardelean
- Senior
- Posts: 1175
- Joined: 12 Jul 2007, 09:22
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Cum pot schimba versiunea de program automat ?
La ce e util sa tii informatia asta in registri? Pentru a o afisa in fereastra de About? Daca, doar pentru atat, atunci... come on! Lucrurile sunt mult mai simple de atat.
Daca se merge pe ideea cu header-ul version.h acesta se poate folosi atat in fisierele de resurse cum s-a exemplificat mai sus iar pentru a pune in About (incluzi version.h si folosesti constanta dorita). Pentru ce sa te scarpini in urechi, pardon in registri?
Daca vrei sa faci mai elegant, iti faci si o metoda get ce intoarce consanta de product version si o folosesti.
Daca se merge pe ideea cu header-ul version.h acesta se poate folosi atat in fisierele de resurse cum s-a exemplificat mai sus iar pentru a pune in About (incluzi version.h si folosesti constanta dorita). Pentru ce sa te scarpini in urechi, pardon in registri?

Daca vrei sa faci mai elegant, iti faci si o metoda get ce intoarce consanta de product version si o folosesti.
Re: Cum pot schimba versiunea de program automat ?
Aaaa, la ce e util sa o tii?
Pai asa s-a gindit MS ca e bine la toate setup sa pastreze automat product version din msi, al tuturor aplicatiilor instalate. Si daca incerci inca o data instalezi acceasi aplicatie se uita, daca vorbim de acceasi versiuni, e repair, daca minor e mai mare e upgrade, si daca e major, silent uninstall si reinstall. Sper ca nu am supra simplificat pina la dat in bara minor upgrade, major upgrade, da puristii o sa zica ca mai exista si small update, dar doar primele 2 se bazeaza pe product version. Si AFAIR (as far as I remember
) toate astea sint in registry, la guid instalare.
Revenind pe on topic, daca aplicatia are instalare nu trebuie scris explicit astea in registry, setup face automat, ci numai citite.
Pai asa s-a gindit MS ca e bine la toate setup sa pastreze automat product version din msi, al tuturor aplicatiilor instalate. Si daca incerci inca o data instalezi acceasi aplicatie se uita, daca vorbim de acceasi versiuni, e repair, daca minor e mai mare e upgrade, si daca e major, silent uninstall si reinstall. Sper ca nu am supra simplificat pina la dat in bara minor upgrade, major upgrade, da puristii o sa zica ca mai exista si small update, dar doar primele 2 se bazeaza pe product version. Si AFAIR (as far as I remember

Revenind pe on topic, daca aplicatia are instalare nu trebuie scris explicit astea in registry, setup face automat, ci numai citite.
- Silviu Ardelean
- Senior
- Posts: 1175
- Joined: 12 Jul 2007, 09:22
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Cum pot schimba versiunea de program automat ?
Catalin, indiferent de kitul instalat, daca folosesti ce spuneam eu, binarele produsului tau vor avea deja propietatile fisierului cu versiunea data cat si la About.
Si pana la urma, daca tot s-a dus discutia inspre kituri... si kit-urile pot utiliza "version.h".
Si pana la urma, daca tot s-a dus discutia inspre kituri... si kit-urile pot utiliza "version.h".

Re: Cum pot schimba versiunea de program automat ?
Setup are transparent astea, si daca ai mai multe executabile in aplicatie recte dll incepi sa mai complici putin problema... Doable da lenesul de mine ar cauta ceva mai simplu.
Acuma daca h din unele productivity tools de facut msi e compatibil cu cel "normal" de C cred ca e o discutie in sine, iarasi nu cred ca lenesul din mine s-ar lega la cap cu asta, mai ales ca product version trebuie sa il modific neaparat cind compilez un setup nou.
Acuma daca h din unele productivity tools de facut msi e compatibil cu cel "normal" de C cred ca e o discutie in sine, iarasi nu cred ca lenesul din mine s-ar lega la cap cu asta, mai ales ca product version trebuie sa il modific neaparat cind compilez un setup nou.
- Silviu Ardelean
- Senior
- Posts: 1175
- Joined: 12 Jul 2007, 09:22
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Cum pot schimba versiunea de program automat ?
Nu o complici nimic daca organizezi cum trebuie solutia.MrSmersh wrote: daca ai mai multe executabile in aplicatie recte dll incepi sa mai complici putin problema...

Pui fisierele comune in directorul radacina de surse sau intr-un folder de include comun tuturor proiectelor si ai pace.