PDA

View Full Version : بدست آوردن ورژن exe برنامه



AmirSky
سه شنبه 28 اردیبهشت 1389, 11:50 صبح
باسلام

من میخواستم در قسمتهایی از برنامه مانند About مشخصات ورژن EXE برنامه رو جهت اطلاع قراربدم .
ممنون میشم اگر راهنمایی کنید.

حسین شهریاری
سه شنبه 28 اردیبهشت 1389, 12:06 عصر
سلام

About مربوط به نات پد ویندوز را ببینید و ازش ایده بگیرید.
طریقش هم اینطوره که اگه برنامه نسخه ابتدایی است باید 1.1 باشه و بعد هرچی همین نسخه ارتقا پیدا کرد به همین صورت 1.2 و 1.3 و ... تا اینکه کلا ماهیت نرم افزار عوض بشه اون موقه ورژن به 2.1 ارتقا داده میشه و همینطور ادامه پیدا میکنه

AmirSky
سه شنبه 28 اردیبهشت 1389, 12:16 عصر
نه منظور من یه چیز دیگه است. ورژن برنامه رو می شه به صورت String در هر جایی قرارداد
ولی من میخوام بعد تنظیمات در پروژه ، با کد نویسی این کار رو انجام داد
توی چند سایت چیزهایی دیدم و درست کار نمیکردند.
هلپ دلفی من کار نمیکنه ولی نباید کار خیلی سختی باشه.
در About خود دلفی 2010 هم در قسمت بالا مشخصات کامل ورژن وجود داره. من دقیقا همون رو میخوام. یعنی مشخصات کامل ورژن
ممنون

Mahyaa
سه شنبه 28 اردیبهشت 1389, 12:20 عصر
GetFileVersionInfo :


function GetVersionOfExeDLL(FlName : string) : string;
var
VerInfoSize : DWORD;
VerInfo : Pointer;
VerValueSize : DWORD;
VerValue : PVSFixedFileInfo;
Dummy : DWORD;
begin
VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(FlName), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
Result := IntToStr(dwFileVersionMS shr 16);
Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
Result := Result + '.' + IntToStr(dwFileVersionLS shr 16);
Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);
end;
FreeMem(VerInfo, VerInfoSize);
end;

Felony
سه شنبه 28 اردیبهشت 1389, 12:33 عصر
function GetFileVersion(const FileName: TFileName): string;
var
lpdwHandle,
puLen,
VersionInfoSize : Cardinal;
lpData,
lplpBuffer : pointer;
begin
Result := '';
if not FileExists(FileName) then
raise Exception.Create('File not found');
//Get version information size
VersionInfoSize := GetFileVersionInfoSize(PChar(FileName),lpdwHandle) ;
if VersionInfoSize <= 0 then
raise Exception.Create('Could not retreive file version info');
//Get memory for the version information
GetMem(lpData,VersionInfoSize);
try
//Retrieve version information
if GetFileVersionInfo(PCHar(FileName),0,VersionInfoSi ze,lpData) = False then
RaiseLastOSError;
//Extract file version from the buffer
if VerQueryValue(lpData,'\\StringFileInfo\\040904E4\\ FileVersion',lplpBuffer,puLen) = False then
RaiseLastOSError;
finally
FreeMem(lpData);
end;
//If any file version info is retrieved then return it as the function result.
if puLen > 0 then
Result := Trim(PAnsiChar(lplpBuffer));
end;

AmirSky
سه شنبه 28 اردیبهشت 1389, 12:35 عصر
با تشکر از Mahyaa (http://www.barnamenevis.org/forum/member.php?u=14818) عزیز مشکلم حل شد

فقط یه سوال کوچیک دارم اونم اینه که در ورژن فایل ها وقتی قسمت اول یعنی Major Version تغییر میکنه در قسمت چهارم یعنی قسمت Build آیا باید از ابتدا شروع بشه یا عدد اون ادامه پیدا میکنه؟

ممنون

Felony
سه شنبه 28 اردیبهشت 1389, 12:40 عصر
دقت کنید که توابع قبلی که قرار داده شده در صورتی که فایل دارای Version Info نباشه با AV برنامه رو متوقف میکنن ، تابعی که من قرار دادم این مشکل رو نداره و بهتون یک پیغام خطا نمایش میده که خودتون میتونید بسته به نیازتون تغییرش بدید .

در مورد سوال دومتون هم تو گوگل به دنبال نحوه ورژن گزاری نرم افزار بگردید .

ali_abbasi22145
سه شنبه 28 اردیبهشت 1389, 16:32 عصر
http://en.wikipedia.org/wiki/Software_versioning

kamran_dev
یک شنبه 27 تیر 1389, 10:41 صبح
دوستان من همین دستورات رو اجرا کردم اما نمی دونم چرا CompanyName،FileDescriptionو... رو بهم نمیده .کسی هست راهنمایی کنه؟

53083

vcldeveloper
یک شنبه 27 تیر 1389, 12:05 عصر
دقت کنید که اطلاعات ورژنی که از طریق این کدها به دست میارید، وابسته به زبان هست. این اطلاعات به صورت ریسورس تحت زبانی که در تنظیمات پروژه برای پروژه تعریف می کنید، ذخیره میشند. مثلا در کد بالا مقدار 040904E4 در واقع کد زبان مورد استفاده هست. اگر زبانی که در تنظیمات پروژه در نظر گرفتید با این زبان یکی نباشه، اطلاعات مربوط به ورژن به دست نمیاد!



فقط یه سوال کوچیک دارم اونم اینه که در ورژن فایل ها وقتی قسمت اول یعنی Major Version تغییر میکنه در قسمت چهارم یعنی قسمت Build آیا باید از ابتدا شروع بشه یا عدد اون ادامه پیدا میکنه؟
Build Number ریست نمیشه، و همیشه مقدارش افزایش پیدا میکنه.

kamran_dev
یک شنبه 27 تیر 1389, 12:15 عصر
حق با شما بود . با تغییر زبان Locale ID به مقدار تعیین شده در پروژه تغییر یافت که حل شد.
ممنون آقای کشاورز.

Mahdi_S_T
شنبه 01 آبان 1389, 15:27 عصر
function GetFileVersion(const FileName: TFileName): string;
var
lpdwHandle,
puLen,
VersionInfoSize : Cardinal;
lpData,
lplpBuffer : pointer;
begin
Result := '';
if not FileExists(FileName) then
raise Exception.Create('File not found');
//Get version information size
VersionInfoSize := GetFileVersionInfoSize(PChar(FileName),lpdwHandle) ;
if VersionInfoSize <= 0 then
raise Exception.Create('Could not retreive file version info');
//Get memory for the version information
GetMem(lpData,VersionInfoSize);
try
//Retrieve version information
if GetFileVersionInfo(PCHar(FileName),0,VersionInfoSi ze,lpData) = False then
RaiseLastOSError;
//Extract file version from the buffer
if VerQueryValue(lpData,'\\StringFileInfo\\040904E4\\ FileVersion',lplpBuffer,puLen) = False then
RaiseLastOSError;
finally
FreeMem(lpData);
end;
//If any file version info is retrieved then return it as the function result.
if puLen > 0 then
Result := Trim(PAnsiChar(lplpBuffer));
end;
چرا این کد در دلفی 2011 اجرا نمیشه و خطا میده ؟