2011-10-17 22 views
6

Aldığım Exe dosyasıyla ilgili bilgiler VerQueryValue aracılığıyla alın. Bu bilgileri kayıt edebilen (oluşturacak veya değiştirebilecek) bir ters fonksiyon var mı (WinApi veya Delphi)? Burada, örneğin, bunu yapabilen bir program var. Nasıl çalışır (http://www.angusj.com/resourcehacker)?Set EXE Sürüm Bilgisi

+1

Bu [sürüm kaynak] tarafından belirlenir: Size (mevcut halkı bir arkadaşım tarafından kodlanmış ve bir oluyor) bu kodu başlayan ne istediğini yapmak çok kolaydır. com/tr-tr/kütüphane/aa381058 (VS.85) .aspx). Değiştirmek için ['UpdateResource'] (http://msdn.microsoft.com/en-us/library/ms648049 (VS.85) .aspx) kullanın. –

+1

Burada, sürüm bilgilerinin nasıl ayarlanacağı ile ilgili bir programın bağlantısı var. Delphi 2009 ve üstü uyumlu. [Updated-setversion-exe-to-set-dosyası-versiyon-info-in-res-ya-exe] (http://www.jasontpenny.com/blog/2009/09/05/updated-setversion-exe- to-set-file-version-in-res-or-exe /) –

cevap

12

Sürüm bilgisi kaynaklar tarafından saklanır; Bu kaynağı düzenlemek için gerekenleri düzenlemek için. Burada mevcut bir dosya sürümü bilgisini klonlayabilen ve onu başka bir dosyaya ekleyebileceğim bir birim var. http://msdn.microsoft (

unit cloneinfo; 

interface 

uses Windows, SysUtils; 

type 
LANGANDCODEPAGE = record 
    wLanguage: Word; 
    wCodePage: Word; 
end; 

procedure clone(sFile,output:string); 

implementation 

procedure clone(sFile,output:string); 
var 
    dwHandle, cbTranslate: cardinal; 
    sizeVers: DWord; 
    lpData, langData: Pointer; 
    lpTranslate: ^LANGANDCODEPAGE; 
    hRes : THandle; 
begin 
sizeVers := GetFileVersionInfoSize(PChar(sFile), dwHandle); 
If sizeVers = 0 then 
exit; 
GetMem(lpData, sizeVers); 
try 
    ZeroMemory(lpData, sizeVers); 
    GetFileVersionInfo (PChar(sFile), 0, sizeVers, lpData); 
    If not VerQueryValue (lpData, '\VarFileInfo\Translation', langData, cbTranslate) then 
    exit; 
    hRes := BeginUpdateResource(pchar(output), FALSE); 
    //For i := 0 to (cbTranslate div sizeof(LANGANDCODEPAGE)) do 
    //begin 
    lpTranslate := Pointer(Integer(langData) + sizeof(LANGANDCODEPAGE)); 
    UpdateResource(hRes, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), lpTranslate^.wLanguage,lpData, sizeVers); 
    //end; 
    EndUpdateResource(hRes, FALSE); 
finally 
    FreeMem(lpData); 
end; 
end; 


end. 
+0

Sadece dil ve kod sayfası bilgileri içindir. [VS_FIXEDFILEINFO] (http://msdn.microsoft.com/en-us/library/ms646997%28v=VS.85%29.aspx) nedir? +1 her neyse – TLama

+0

Teşekkürler, şimdi araştırmalara katılacağım ... –

+1

Eğer internette bulduğunuz bir birim ise, lisansa daha fazla dikkat etmeniz gerekiyor. En azından, kaynağa bir bağlantı sağlamalısınız. (Ayrıca, http://en.wikipedia.org/wiki/Run-on_sentence bir göz atın.) –