2011-10-17 14 views
6

सेट करें संस्करण EXE-file संस्करण पर जानकारी VerQueryValue के माध्यम से प्राप्त होती है। क्या कोई व्यस्त कार्य (विनएपी या डेल्फी) है जो ऐसी जानकारी पंजीकृत (स्थापित या बदल सकता है)? यहां, उदाहरण के लिए, एक ऐसा प्रोग्राम है जो ऐसा करने में सक्षम है। यह कैसे काम कर सकता है (http://www.angusj.com/resourcehacker)?EXE VersionInfo

+1

यह [संस्करण संसाधन] से निर्धारित होता है (http://msdn.microsoft: यह आप (यह मेरा एक दोस्त द्वारा कोडित है और है उपलब्ध सार्वजनिक) इस कोड से क्या शुरू करने के लिए करना चाहते हैं बहुत आसान है। com/en-us/पुस्तकालय/aa381058 (VS.85) .aspx)। इसे संशोधित करने के लिए ['UpdateResource'] (http://msdn.microsoft.com/en-us/library/ms648049 (VS.85) .aspx) का उपयोग करें। –

+1

यहां एक प्रोग्राम के साथ एक लिंक है जो स्रोत जानकारी को सेट करने के स्रोत के साथ है। डेल्फी 200 9 और संगत। [अद्यतन-setversion-एक्स-टू-सेट-फ़ाइल-संस्करण-जानकारी-इन-रेस या exe] (http://www.jasontpenny.com/blog/2009/09/05/updated-setversion-exe- टू-सेट-फ़ाइल-वर्जन-इन-रेस-या-एक्सई /) –

उत्तर

12

संस्करण जानकारी संसाधनों के माध्यम से संग्रहीत की जाती है; यह संपादित करने के लिए कि आपको बस उस संसाधन को संपादित करने की आवश्यकता है। यहां एक इकाई है जो मैंने पाया है कि मौजूदा फ़ाइल संस्करण की जानकारी क्लोन कर सकते हैं और इसे किसी अन्य फ़ाइल से जोड़ सकते हैं।

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

यह सिर्फ भाषा और कोड पृष्ठ की जानकारी के लिए है। [VS_FIXEDFILEINFO] के बारे में क्या (http://msdn.microsoft.com/en-us/library/ms646997%28v=VS.85%29.aspx)? +1 वैसे भी – TLama

+0

धन्यवाद बड़ा, अब मैं शोध में व्यस्त रहूंगा ... –

+1

यदि यह एक इकाई है जिसे आपने इंटरनेट पर पाया है, तो आपको लाइसेंसिंग के साथ और सावधान रहना होगा। बहुत कम से कम, आपको स्रोत को एक लिंक प्रदान करना चाहिए। (इसके अलावा, http://en.wikipedia.org/wiki/Run-on_sentence पर एक नज़र डालें।) –